List of usage examples for com.lowagie.text Document setMargins
public boolean setMargins(float marginLeft, float marginRight, float marginTop, float marginBottom)
From source file:AppletViewer.java
License:Open Source License
/** * Metodo que crea un PDF a partir del archivo TIF con sus anotaciones * @param docid/*from w w w . j a v a2 s . c o m*/ */ public void convertDocument(String docid) { try { File dir = new File(descargados); if (!dir.exists()) { dir.mkdirs(); } dir = new File(transferencias); if (!dir.exists()) { dir.mkdirs(); } // CARGAR TIF CON ANOTACIONES String tmpFileName = "TMP" + String.valueOf(System.currentTimeMillis()) + ".tif"; OutputStream output = new FileOutputStream(descargados + File.separator + tmpFileName); myGenDocViewer.exportDocument(output, true, false, "image/tiff"); output.close(); // CONVERTIR TIF A PDF RandomAccessFileOrArray myTiffFile = new RandomAccessFileOrArray( descargados + File.separator + tmpFileName); int numberOfPages = TiffImage.getNumberOfPages(myTiffFile); Document TifftoPDF = new Document(); TifftoPDF.setMargins(0, 0, 0, 0); PdfWriter.getInstance(TifftoPDF, new FileOutputStream(transferencias + File.separator + type + "-AN.pdf")); TifftoPDF.open(); for (int i = 1; i <= numberOfPages; i++) { Image tempImage = TiffImage.getTiffImage(myTiffFile, i); float dpiX = tempImage.getDpiX() == 0 ? 200 : tempImage.getDpiX(); float dpiY = tempImage.getDpiY() == 0 ? 200 : tempImage.getDpiY(); float factorX = 72 / dpiX; float factorY = 72 / dpiY; tempImage.scaleAbsolute(factorX * tempImage.getWidth(), factorY * tempImage.getHeight()); TifftoPDF.add(tempImage); } myTiffFile.close(); TifftoPDF.close(); // BORRAR EL TIFF File file = new File(descargados + File.separator + tmpFileName); if (file.delete()) { System.out.println(file.getName() + " eliminado"); } else { file.deleteOnExit(); ; System.out.println("Eliminacion fallo"); } System.out.println("Fin de la creacion del PDF con anotaciones"); } catch (Exception e) { e.printStackTrace(); } }
From source file:beans.ManagedBeanProducto.java
License:Open Source License
public String CreatePdf() throws IOException, DocumentException { ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext(); //System.out.println(" test: "+extContext); //System.out.println(" esta es la ruta" + extContext.getRealPath("//pdfs//")); // step 1//from ww w . j a v a2 s .c o m String ruta_pdfs = extContext.getRealPath("//pdfs//"); Document document = new Document(PageSize.A4); document.setMargins(5, 5, 25, 25); document.setMarginMirroring(true); // step 2 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(ruta_pdfs + "//CB" + Producto.getIdProducto() + ".pdf")); // step 3 document.open(); // step 4 PdfContentByte cb = writer.getDirectContent(); Paragraph Titulo = new Paragraph( "PRODUCTO : " + Producto.getNombreProducto().substring(14).toUpperCase() + "\n\n"); Titulo.setAlignment(Paragraph.ALIGN_CENTER); document.add(Titulo); // EAN 13 // document.add(new Paragraph("Barcode EAN.UCC-13")); BarcodeEAN codeEAN = new BarcodeEAN(); codeEAN.setCode(CodigoBarrasFinal()); String nombre_producto = ""; if (Producto.getNombreProducto().length() >= 41) { nombre_producto = Producto.getNombreProducto().substring(14, 41); } else { nombre_producto = Producto.getNombreProducto().substring(14); } // document.add(new Paragraph(nombre_producto,new Font(Font.COURIER, 5, Font.NORMAL))); // document.add(codeEAN.createImageWithBarcode(cb,Color.BLUE , Color.BLUE)); // codeEAN.setGuardBars(false); // document.add(new Paragraph(nombre_producto,new Font(Font.COURIER, 5, Font.NORMAL))); // codeEAN.setGuardBars(false); Image imagen = codeEAN.createImageWithBarcode(cb, null, null); imagen.scaleAbsolute(87, 45); //document.add(imagen); PdfPTable table = new PdfPTable(5); table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE); // table.setTotalWidth(1800); PdfPCell cell; Phrase nombre = new Phrase(nombre_producto.toUpperCase(), new Font(Font.COURIER, 5, Font.BOLD, Color.BLACK)); cell = new PdfPCell(); cell.addElement(nombre); //cell.addElement(new Chunk("\n")); cell.addElement(imagen); //cell.addElement(new Chunk("\n")); table.addCell(cell); //table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); //table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); table.addCell(cell); document.add(table); // EAN 8 "6987"; // String inicio ="345"; // int intermedio =1000+Producto.getIdProducto(); // String fin ="0"; // document.add(new Paragraph(Producto.getNombreProducto(),new Font(Font.COURIER, 4, Font.NORMAL))); // codeEAN.setCodeType(Barcode.EAN8); // codeEAN.setBarHeight(codeEAN.getSize() * 1.5f); // codeEAN.setCode(inicio.concat(intermedio+fin)); // document.add(codeEAN.createImageWithBarcode(cb, null, null)); document.close(); return "codigo_barras_productos"; }
From source file:biblivre3.cataloging.bibliographic.BiblioBO.java
License:Open Source License
public MemoryFileDTO createFileLabelsPDF(ArrayList<LabelDTO> labels, LabelConfigDTO labelConfig) { Document document = new Document(); final MemoryFileDTO file = new MemoryFileDTO(); file.setFileName("biblivre_etiquetas_" + new Date().getTime() + ".pdf"); try {/*from w w w. ja va 2s .c o m*/ ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter writer = PdfWriter.getInstance(document, baos); document.setPageSize(PageSize.A4); float verticalMargin = (297.0f - (labelConfig.getHeight() * labelConfig.getRows())) / 2; document.setMargins(7.15f * ApplicationConstants.MM_UNIT, 7.15f * ApplicationConstants.MM_UNIT, verticalMargin * ApplicationConstants.MM_UNIT, verticalMargin * ApplicationConstants.MM_UNIT); document.open(); PdfPTable table = new PdfPTable(labelConfig.getColumns()); table.setWidthPercentage(100f); PdfPCell cell; int i = 0; for (i = 0; i < labelConfig.getOffset(); i++) { cell = new PdfPCell(); cell.setBorder(Rectangle.NO_BORDER); cell.setFixedHeight(labelConfig.getHeight() * ApplicationConstants.MM_UNIT); table.addCell(cell); } for (LabelDTO ldto : labels) { PdfContentByte cb = writer.getDirectContent(); String holdingSerial = String.valueOf(ldto.getHoldingSerial()); while (holdingSerial.length() < 10) { holdingSerial = "0" + holdingSerial; } Barcode39 code39 = new Barcode39(); code39.setExtended(true); code39.setCode(holdingSerial); code39.setStartStopText(false); Image image39 = code39.createImageWithBarcode(cb, null, null); if (labelConfig.getHeight() > 30.0f) { image39.scalePercent(110f); } else { image39.scalePercent(90f); } Paragraph para = new Paragraph(); Phrase p1 = new Phrase(StringUtils.left(ldto.getAuthor(), 28) + "\n"); Phrase p2 = new Phrase(StringUtils.left(ldto.getTitle(), 28) + "\n\n"); Phrase p3 = new Phrase(new Chunk(image39, 0, 0)); para.add(p1); para.add(p2); para.add(p3); cell = new PdfPCell(para); i++; cell.setNoWrap(true); cell.setFixedHeight(labelConfig.getHeight() * ApplicationConstants.MM_UNIT); cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); cell.setBorder(Rectangle.NO_BORDER); table.addCell(cell); Paragraph para2 = new Paragraph(); Phrase p5 = new Phrase(ldto.getLocationA() + "\n"); Phrase p6 = new Phrase(ldto.getLocationB() + "\n"); Phrase p7 = new Phrase(ldto.getLocationC() + "\n"); Phrase p8 = new Phrase(ldto.getLocationD() + "\n"); Phrase p4 = new Phrase(ldto.getAssetHolding() + "\n"); para2.add(p5); para2.add(p6); para2.add(p7); para2.add(p8); para2.add(p4); cell = new PdfPCell(para2); i++; cell.setFixedHeight(labelConfig.getHeight() * ApplicationConstants.MM_UNIT); cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); cell.setBorder(Rectangle.NO_BORDER); table.addCell(cell); } if ((i % labelConfig.getColumns()) != 0) { while ((i % labelConfig.getColumns()) != 0) { i++; cell = new PdfPCell(); cell.setBorder(Rectangle.NO_BORDER); table.addCell(cell); } } document.add(table); writer.flush(); document.close(); file.setFileData(baos.toByteArray()); } catch (Exception de) { System.out.println(de.getMessage()); } return file; }
From source file:biblivre3.circulation.CirculationBO.java
License:Open Source License
public MemoryFileDTO createFileUserCardsPDF(ArrayList<UserCardDTO> cards, int startOffset, Properties i18n) { Document document = new Document(); MemoryFileDTO file = new MemoryFileDTO(); file.setFileName("user_cards_" + new Date().getTime() + ".pdf"); try {/*w ww .ja v a2 s .c o m*/ ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter writer = PdfWriter.getInstance(document, baos); document.setPageSize(PageSize.A4); document.setMargins(7.15f * ApplicationConstants.MM_UNIT, 7.15f * ApplicationConstants.MM_UNIT, 9.09f * ApplicationConstants.MM_UNIT, 9.09f * ApplicationConstants.MM_UNIT); document.open(); PdfPTable table = new PdfPTable(3); table.setWidthPercentage(100f); PdfPCell cell; int i = 0; for (i = 0; i < startOffset; i++) { cell = new PdfPCell(); cell.setBorder(Rectangle.NO_BORDER); cell.setFixedHeight(46.47f * ApplicationConstants.MM_UNIT); table.addCell(cell); } for (UserCardDTO card : cards) { String userEnrollNumber = String.valueOf(card.getUserId()); PdfContentByte cb = writer.getDirectContent(); Barcode39 code39 = new Barcode39(); code39.setExtended(true); while (userEnrollNumber.length() < 10) { userEnrollNumber = "0" + userEnrollNumber; } code39.setCode(userEnrollNumber); code39.setStartStopText(false); Image image39 = code39.createImageWithBarcode(cb, null, null); image39.scalePercent(110f); Paragraph para = new Paragraph(); String name = card.getUserName(); name = name.length() >= 30 ? name.substring(0, 30) : name; Phrase p1 = new Phrase(name + "\n"); Phrase p2 = new Phrase(new Chunk(image39, 0, 0)); Phrase p3 = new Phrase( I18nUtils.getText(i18n, "LABEL_USER_SERIAL") + ": " + card.getUserId() + "\n"); Phrase p4 = new Phrase( I18nUtils.getText(i18n, "LABEL_USER_TYPE") + ": " + card.getUserType() + "\n\n"); para.add(p1); para.add(p3); para.add(p4); para.add(p2); cell = new PdfPCell(para); i++; cell.setFixedHeight(46.47f * ApplicationConstants.MM_UNIT); cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); cell.setBorder(Rectangle.NO_BORDER); table.addCell(cell); } if ((i % 3) != 0) { while ((i % 3) != 0) { i++; cell = new PdfPCell(); cell.setBorder(Rectangle.NO_BORDER); table.addCell(cell); } } document.add(table); writer.flush(); document.close(); writer.close(); file.setFileData(baos.toByteArray()); } catch (DocumentException de) { System.out.println(de.getMessage()); } return file; }
From source file:ch.elexis.omnivore.data.DocHandle.java
License:Open Source License
public static List<DocHandle> assimilate(List<ImageData> images) { List<DocHandle> ret = new ArrayList<DocHandle>(); FileImportDialog fid = new FileImportDialog(Messages.DocHandle_scannedImageDialogCaption); if (fid.open() == Dialog.OK) { try {/*w ww.j ava2 s. c om*/ Document pdf = new Document(PageSize.A4); pdf.setMargins(0, 0, 0, 0); ByteArrayOutputStream baos = new ByteArrayOutputStream(100000); PdfWriter.getInstance(pdf, baos); pdf.open(); ImageLoader il = new ImageLoader(); for (int i = 0; i < images.size(); i++) { ImageData[] id = new ImageData[] { images.get(i) }; il.data = id; ByteArrayOutputStream bimg = new ByteArrayOutputStream(); il.save(bimg, SWT.IMAGE_PNG); Image image = Image.getInstance(bimg.toByteArray()); int width = id[0].width; int height = id[0].height; // 210mm = 8.27 In = 595 px bei 72dpi // 297mm = 11.69 In = 841 px if ((width > 595) || (height > 841)) { image.scaleToFit(595, 841); } pdf.add(image); } pdf.close(); DocHandle docHandle = new DocHandle(fid.category, baos.toByteArray(), ElexisEventDispatcher.getSelectedPatient(), fid.originDate, fid.title, "image.pdf", //$NON-NLS-1$ fid.keywords); ret.add(docHandle); } catch (Exception ex) { ExHandler.handle(ex); SWTHelper.showError(Messages.DocHandle_readError, Messages.DocHandle_readErrorText2); } } return ret; }
From source file:ch.gpb.elexis.kgexporter.pdf.PdfHandler.java
License:Open Source License
public static void createLaborwertTable(Patient patient, String filename, LinkedList<String[]> laborBlatt, String footerText) throws IOException, DocumentException { // step 1/*w w w .ja va 2 s . c o m*/ Document document = new Document(PageSize.A4); // step 2 PdfWriter.getInstance(document, new FileOutputStream(filename)); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); // step 3 writer.setBoxSize("art", rect); HeaderFooterPageEvent event = new HeaderFooterPageEvent(); event.setHeaderText( patient.getVorname() + " " + patient.getName() + " (" + patient.getGeburtsdatum() + ")"); event.setFooterText(footerText); writer.setPageEvent(event); document.setMargins(56, 72, 60, 60); // step 3 document.open(); if (laborBlatt.size() == 0) { Paragraph p = new Paragraph(new Chunk("Keine Laborwerte vorhanden", fontTimesTitle)); p.setSpacingBefore(20f); document.add(p); } else { document.add(createTable2(laborBlatt)); } // step 5 document.close(); }
From source file:ch.gpb.elexis.kgexporter.pdf.PdfHandler.java
License:Open Source License
public static void createDiagnosenSheet(Patient patient, String filename, String footerText) throws DocumentException, IOException { StringBuffer sb = new StringBuffer("Diagnosen:\n"); sb.append(patient.getDiagnosen());//from w w w. j av a 2 s . c om sb.append("\n"); sb.append("Persnliche Anamnese:\n"); sb.append(patient.getPersAnamnese()); sb.append("\n"); // step 1 Document document = new Document(PageSize.A4); // step 2 PdfWriter.getInstance(document, new FileOutputStream(filename)); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); // step 3 //Rectangle rect = new Rectangle(30, 30, 559, 800); writer.setBoxSize("art", rect); HeaderFooterPageEvent event = new HeaderFooterPageEvent(); event.setHeaderText( patient.getVorname() + " " + patient.getName() + " (" + patient.getGeburtsdatum() + ")"); event.setFooterText(footerText); writer.setPageEvent(event); document.setMargins(36, 72, 60, 60); // step 3 document.open(); document.add(new Chunk("")); // << this will do the trick. if (patient.getDiagnosen().length() > 0) { Paragraph p = new Paragraph("Diagnosen:", fontTimesTitle); p.setSpacingAfter(10f); document.add(p); String[] chunksDiag = patient.getDiagnosen().toString().split("(?m)^\\s*$"); for (String chunk : chunksDiag) { document.add(new Paragraph(chunk, fontTimes)); } } else { document.add(new Paragraph("Keine Diagnosen vorhanden", fontTimes)); } if (patient.getPersAnamnese().length() > 0) { Paragraph p = new Paragraph("Persnliche Anamnese:", fontTimesTitle); p.setSpacingBefore(10f); p.setSpacingAfter(10f); document.add(p); String[] chunksAnam = patient.getPersAnamnese().toString().split("(?m)^\\s*$"); for (String chunk : chunksAnam) { document.add(new Paragraph(chunk, fontTimes)); } } else { document.add(new Paragraph("Keine Persnliche Anamnese vorhanden", fontTimes)); } // step 5 document.close(); }
From source file:ch.gpb.elexis.kgexporter.pdf.PdfHandler.java
License:Open Source License
public static void createFixMediSheet(Patient patient, String filename, String footerText) throws DocumentException, IOException { Prescription[] prescriptions = patient.getFixmedikation(); StringBuffer sb = new StringBuffer(); for (Prescription prescription : prescriptions) { //System.out.println("Prescription: " + prescription.getLabel() + "/" + prescription.getDosis()); sb.append(prescription.getLabel()); sb.append("\r\n"); }//from ww w .j av a 2s . com // step 1 Document document = new Document(PageSize.A4); // step 2 PdfWriter.getInstance(document, new FileOutputStream(filename)); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); // step 3 //Rectangle rect = new Rectangle(30, 30, 559, 800); writer.setBoxSize("art", rect); HeaderFooterPageEvent event = new HeaderFooterPageEvent(); event.setHeaderText( patient.getVorname() + " " + patient.getName() + " (" + patient.getGeburtsdatum() + ")"); event.setFooterText(footerText); writer.setPageEvent(event); document.setMargins(36, 72, 60, 60); // step 3 document.open(); document.add(new Chunk("")); // << this will do the trick. if (sb.length() > 0) { Paragraph p = new Paragraph("Fixmedikation:", fontTimesTitle); p.setSpacingAfter(10f); document.add(p); String[] chunksDiag = sb.toString().split("(?m)^\\s*$"); for (String chunk : chunksDiag) { document.add(new Paragraph(chunk, fontTimes)); } } else { //document.add(new Paragraph("Keine Medikationen vorhanden", fontTimes)); Paragraph p = new Paragraph(new Chunk("Keine Medikationen vorhanden", fontTimesTitle)); p.setSpacingBefore(20f); document.add(p); } // step 5 document.close(); }
From source file:classroom.filmfestival_b.Movies11.java
@SuppressWarnings("unchecked") public static void main(String[] args) { // step 1/*from ww w .ja v a 2 s .co m*/ Document document = new Document(); document.setMargins(36, 36, 48, 48); float middle = (document.right() + document.left()) / 2; float columns[][] = { { document.left(), document.bottom(), middle - 12, document.top() }, { middle + 12, document.bottom(), document.right(), document.top() } }; try { // step 2 OutputStream os = new FileOutputStream(RESULT); PdfWriter writer = PdfWriter.getInstance(document, os); writer.setPageEvent(new Movies11().new MoviePageEvents(middle, document.top(), document.bottom())); // step 3 document.open(); // step 4 Session session = (Session) MySessionFactory.currentSession(); Query q = session.createQuery("from FilmTitle order by title"); java.util.List<FilmTitle> results = q.list(); ColumnText column = new ColumnText(writer.getDirectContent()); column.setSimpleColumn(columns[0][0], columns[0][1], columns[0][2], columns[0][3]); float pos; int status; int ccount = 0; File f; Image img; Paragraph p; Chunk c; Font bold = new Font(Font.HELVETICA, 12, Font.BOLD); Font italic = new Font(Font.HELVETICA, 12, Font.ITALIC); for (FilmTitle movie : results) { f = new File("resources/classroom/filmposters/" + movie.getFilmId() + ".jpg"); if (f.exists()) { img = Image.getInstance(f.getPath()); img.setWidthPercentage(0); img.scaleToFit(72, 144); } else { img = null; } p = new Paragraph(20); c = new Chunk(movie.getTitle(), bold); c.setAnchor("http://cinema.lowagie.com/titel.php?id=" + movie.getFilmId()); p.add(c); c = new Chunk(" (" + movie.getYear() + ") ", italic); p.add(c); c = new Chunk("IMDB"); c.setAnchor("http://www.imdb.com/title/tt" + movie.getImdb()); p.add(c); Set<DirectorName> directors = movie.getDirectorNames(); List list = new List(); for (DirectorName director : directors) { list.add(director.getName()); } if (img != null) column.addElement(img); column.addElement(p); column.addElement(list); pos = column.getYLine(); status = column.go(true); if (ColumnText.hasMoreText(status)) { column.setText(null); ccount++; if (ccount > 1) { ccount = 0; document.newPage(); column.setSimpleColumn(columns[0][0], columns[0][1], columns[0][2], columns[0][3]); } else { column.setSimpleColumn(columns[1][0], columns[1][1], columns[1][2], columns[1][3]); } } else { column.setYLine(pos); } if (img != null) column.addElement(img); column.addElement(p); column.addElement(list); column.addElement(Chunk.NEWLINE); column.go(); } // step 5 document.close(); } catch (IOException e) { LOGGER.error("IOException: ", e); } catch (DocumentException e) { LOGGER.error("DocumentException: ", e); } }
From source file:com.amphisoft.epub2pdf.Converter.java
License:Open Source License
public void convert(String epubPath) throws IOException, DocumentException { File epubFile = new File(epubPath); if (!(epubFile.canRead())) { throw new IOException("Could not read " + epubPath); } else {//from www . ja va 2s . co m System.err.println("Converting " + epubFile.getAbsolutePath()); } String epubFilename = epubFile.getName(); String epubFilenameBase = epubFilename.substring(0, epubFilename.length() - 5); String pdfFilename = epubFilenameBase + ".pdf"; File outputFile = new File(outputDir.getAbsolutePath() + File.separator + pdfFilename); epubIn = Epub.fromFile(epubPath); XhtmlHandler.setSourceEpub(epubIn); Opf opf = epubIn.getOpf(); List<String> contentPaths = opf.spineHrefs(); List<File> contentFiles = new ArrayList<File>(); for (String path : contentPaths) { contentFiles.add(new File(epubIn.getContentRoot(), path)); } Ncx ncx = epubIn.getNcx(); List<NavPoint> ncxToc = new ArrayList<NavPoint>(); if (ncx != null) { ncxToc.addAll(ncx.getNavPointsFlat()); } Tree<TocTreeNode> tocTree = TocTreeNode.buildTocTree(ncx); XhtmlHandler.setTocTree(tocTree); Document doc = new Document(); boolean pageSizeOK = doc.setPageSize(pageSize); boolean marginsOK = doc.setMargins(marginLeftPt, marginRightPt, marginTopPt, marginBottomPt); System.err.println("Writing PDF to " + outputFile.getAbsolutePath()); PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(outputFile)); writer.setStrictImageSequence(true); PdfOutline bookmarkRoot = null; if (!(pageSizeOK && marginsOK)) { throw new RuntimeException("Failed to set PDF page size a/o margins"); } int fileCount = contentFiles.size(); printlnerr("Processing " + fileCount + " HTML file(s): "); int currentFile = 0; for (File file : contentFiles) { currentFile++; char progressChar; int mod10 = currentFile % 10; if (mod10 == 5) progressChar = '5'; else if (mod10 == 0) progressChar = '0'; else progressChar = '.'; printerr(progressChar); if (!(doc.isOpen())) { doc.open(); doc.newPage(); bookmarkRoot = writer.getRootOutline(); XhtmlHandler.setBookmarkRoot(bookmarkRoot); } NavPoint fileLevelNP = Ncx.findNavPoint(ncxToc, file.getName()); TreeNode<TocTreeNode> npNode = TocTreeNode.findInTreeByNavPoint(tocTree, fileLevelNP); if (fileLevelNP != null) { doc.newPage(); PdfOutline pdfOutlineParent = bookmarkRoot; if (npNode != null) { TreeNode<TocTreeNode> parent = npNode.getParent(); if (parent != null) { TocTreeNode parentTTN = parent.getValue(); if (parentTTN != null && parentTTN.getPdfOutline() != null) { pdfOutlineParent = parentTTN.getPdfOutline(); } } } PdfDestination here = new PdfDestination(PdfDestination.FIT); PdfOutline pdfTocEntry = new PdfOutline(pdfOutlineParent, here, fileLevelNP.getNavLabelText()); if (npNode != null) { npNode.getValue().setPdfDestination(here); npNode.getValue().setPdfOutline(pdfTocEntry); } } XhtmlHandler.process(file.getCanonicalPath(), doc); } printlnerr(); doc.close(); System.err.println("PDF written to " + outputFile.getAbsolutePath()); epubIn.cleanup(); }