Java tutorial
/* * Copyright (C) 2014 by Array Systems Computing Inc. http://www.array.ca * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) * any later version. * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package org.esa.nest.dat.reports; import com.lowagie.text.*; import com.lowagie.text.Font; import com.lowagie.text.List; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; import java.awt.*; import java.io.File; import java.io.FileOutputStream; import java.util.Date; /** * PRF writing utilities */ public class PDFFormat { private static Font catFont = new Font(Font.TIMES_ROMAN, 18, Font.BOLD); private static Font redFont = new Font(Font.TIMES_ROMAN, 12, Font.NORMAL, Color.RED); private static Font subFont = new Font(Font.TIMES_ROMAN, 16, Font.BOLD); private static Font smallBold = new Font(Font.TIMES_ROMAN, 12, Font.BOLD); private final Document document = new Document(); public void PDFFormat(final File file, final String title, final String subject) { try { PdfWriter.getInstance(document, new FileOutputStream(file)); document.open(); addPDFAttributes(title, subject); addTitlePage(document); addContent(document); document.close(); } catch (Exception e) { e.printStackTrace(); } } /** * iText allows to add metadata to the PDF which can be viewed in your Adobe Reader * under File -> Properties */ private void addPDFAttributes(final String title, final String subject) { document.addTitle(title); document.addSubject(subject); document.addKeywords("NEST, SAR"); document.addAuthor(System.getProperty("user.name")); document.addCreator("NEST"); document.addCreationDate(); } private static void addTitlePage(Document document) throws DocumentException { Paragraph preface = new Paragraph(); // We add one empty line addEmptyLine(preface, 1); // Lets write a big header preface.add(new Paragraph("Title of the document", catFont)); addEmptyLine(preface, 1); // Will create: Report generated by: _name, _date preface.add(new Paragraph("Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ smallBold)); addEmptyLine(preface, 3); preface.add(new Paragraph("This document describes something which is very important ", smallBold)); addEmptyLine(preface, 8); preface.add(new Paragraph( "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.com ;-).", redFont)); document.add(preface); // Start a new page document.newPage(); } private static void addContent(Document document) throws DocumentException { Anchor anchor = new Anchor("First Chapter", catFont); anchor.setName("First Chapter"); // Second parameter is the number of the chapter Chapter catPart = new Chapter(new Paragraph(anchor), 1); Paragraph subPara = new Paragraph("Subcategory 1", subFont); Section subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Hello")); subPara = new Paragraph("Subcategory 2", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Paragraph 1")); subCatPart.add(new Paragraph("Paragraph 2")); subCatPart.add(new Paragraph("Paragraph 3")); // Add a list createList(subCatPart); Paragraph paragraph = new Paragraph(); addEmptyLine(paragraph, 5); subCatPart.add(paragraph); // Add a table createTable(subCatPart); // Now add all this to the document document.add(catPart); // Next section anchor = new Anchor("Second Chapter", catFont); anchor.setName("Second Chapter"); // Second parameter is the number of the chapter catPart = new Chapter(new Paragraph(anchor), 1); subPara = new Paragraph("Subcategory", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("This is a very important message")); // Now add all this to the document document.add(catPart); } private void allign(Document document) throws DocumentException { // Left Paragraph paragraph = new Paragraph("This is right aligned text"); paragraph.setAlignment(Element.ALIGN_RIGHT); document.add(paragraph); // Centered paragraph = new Paragraph("This is centered text"); paragraph.setAlignment(Element.ALIGN_CENTER); document.add(paragraph); // Left paragraph = new Paragraph("This is left aligned text"); paragraph.setAlignment(Element.ALIGN_LEFT); document.add(paragraph); // Left with indentation paragraph = new Paragraph("This is left aligned text with indentation"); paragraph.setAlignment(Element.ALIGN_LEFT); paragraph.setIndentationLeft(50); document.add(paragraph); } private static void createTable(Section subCatPart) throws BadElementException { PdfPTable table = new PdfPTable(3); // t.setBorderColor(BaseColor.GRAY); // t.setPadding(4); // t.setSpacing(4); // t.setBorderWidth(1); PdfPCell c1 = new PdfPCell(new Phrase("Table Header 1")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header 2")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header 3")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); table.setHeaderRows(1); table.addCell("1.0"); table.addCell("1.1"); table.addCell("1.2"); table.addCell("2.1"); table.addCell("2.2"); table.addCell("2.3"); subCatPart.add(table); } private static void createList(Section subCatPart) { List list = new List(true, false, 10); list.add(new ListItem("First point")); list.add(new ListItem("Second point")); list.add(new ListItem("Third point")); subCatPart.add(list); } private static void addEmptyLine(Paragraph paragraph, int number) { for (int i = 0; i < number; i++) { paragraph.add(new Paragraph(" ")); } } /* private static ByteArrayOutputStream createPDF() throws DocumentException, MalformedURLException, IOException { Document doc = new Document(); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); PdfWriter docWriter = null; docWriter = PdfWriter.getInstance(doc, baosPDF); doc.open(); URL imageUrl = new URL("http://www.bruinenfit.nl/images/pdf-logo.jpg"); com.lowagie.text.Image image = com.lowagie.text.Image.getInstance(imageUrl); image.scaleToFit(300,100); image.setAlignment(com.lowagie.text.Image.ALIGN_CENTER); doc.add(image); doc.add(new Paragraph("This special PDF document was created on " + new java.util.Date())); doc.close(); docWriter.close(); return baosPDF; } public static void previewPDFDocumentInImage() throws IOException { ByteBuffer buf = null; try { buf = ByteBuffer.wrap(createPDF().toByteArray()); } catch (DocumentException e) { } // use the PDF Renderer library on the buf which contains the in memory PDF document PDFFile pdffile = new PDFFile(buf); PDFPage page = pdffile.getPage(1); //get the width and height for the doc at the default zoom Rectangle rect = new Rectangle(0, 0, (int)page.getBBox().getWidth(), (int)page.getBBox().getHeight()); //generate the image Image img = page.getImage(rect.width, rect.height, //width & height rect, // clip rect null, // null for the ImageObserver true, // fill background with white true) // block until drawing is done ; //show the image in a frame JFrame frame = new JFrame("My incredible PDF document"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new JLabel(new ImageIcon(img))); frame.pack(); frame.setVisible(true); } public static void main(final String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { PdfToImage.previewPDFDocumentInImage(); } catch (IOException ex) { ex.printStackTrace(); } } }); } */ }