Java tutorial
package sg.edu.nus.util; import java.awt.Color; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import sg.edu.nus.peer.ServerPeer; import com.lowagie.text.Anchor; import com.lowagie.text.BadElementException; import com.lowagie.text.Cell; import com.lowagie.text.Chapter; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Font; import com.lowagie.text.FontFactory; import com.lowagie.text.List; import com.lowagie.text.ListItem; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.Section; import com.lowagie.text.Table; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; import com.lowagie.text.rtf.RtfWriter2; import com.lowagie.text.rtf.style.RtfFont; public class ReportWriter { public static String writeDataArrayToPdf(String userName, ArrayList<String[]> data, String title) { String rawFileName = userName + "_report.pdf"; String fileName = ServerPeer.getReportFolderPath() + "/" + rawFileName; int ncol = data.get(0).length; Document document = new Document(); try { PdfWriter.getInstance(document, new FileOutputStream(fileName)); document.open(); /* Create the font. The font name must exactly match the font name on the client system. */ Paragraph para = null; // RtfFont embossedFont = new RtfFont("Times New Roman", 12, // RtfFont.STYLE_EMBOSSED); // We add one empty line para = new Paragraph(); addEmptyLine(para, 1); // Lets write a big header para.add(new Paragraph(title, catFont)); addEmptyLine(para, 1); // Will create: Report generated by: _name, _date para.add(new Paragraph("Report generated by: " + userName + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ smallBold)); addEmptyLine(para, 3); document.add(para); //add header and table content Font font8 = FontFactory.getFont(FontFactory.HELVETICA, 12); PdfPTable table = null; float columnPercentage = (float) (100.0 / ncol); float[] columnDefinitionSize = new float[ncol]; for (int c = 0; c < ncol; c++) { columnDefinitionSize[c] = columnPercentage; } table = new PdfPTable(columnDefinitionSize); // table.getDefaultCell().setBorder(0); table.setHorizontalAlignment(0); float width = document.getPageSize().getWidth(); table.setTotalWidth(width - 72); table.setLockedWidth(true); //write header String[] arr = data.get(0); for (int j = 0; j < ncol; j++) { table.addCell(new Phrase(arr[j], subFont)); } //write data for (int i = 1; i < data.size(); i++) { arr = data.get(i); for (int j = 0; j < ncol; j++) { table.addCell(new Phrase(arr[j], font8)); } } document.add(table); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } document.close(); return ServerPeer.getWebDownloadAddress() + "/" + rawFileName; } public static String writeDataArrayToRtf(String userName, ArrayList<String[]> data, String title) { String rawFileName = userName + "_report.rtf"; String fileName = ServerPeer.getReportFolderPath() + "/" + rawFileName; int ncol = data.get(0).length; Document document = new Document(); try { RtfWriter2.getInstance(document, new FileOutputStream(fileName)); document.open(); Paragraph para = null; // We add one empty line para = new Paragraph(); addEmptyLine(para, 1); // Lets write a big header para.add(new Paragraph(title, catFont)); addEmptyLine(para, 1); // Will create: Report generated by: _name, _date para.add(new Paragraph("Report generated by: " + userName + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ smallBold)); addEmptyLine(para, 3); document.add(para); //add header and table content Font font8 = FontFactory.getFont(FontFactory.HELVETICA, 12); PdfPTable table = null; float columnPercentage = (float) (100.0 / ncol); float[] columnDefinitionSize = new float[ncol]; for (int c = 0; c < ncol; c++) { columnDefinitionSize[c] = columnPercentage; } table = new PdfPTable(columnDefinitionSize); // table.getDefaultCell().setBorder(0); table.setHorizontalAlignment(0); float width = document.getPageSize().getWidth(); table.setTotalWidth(width - 72); table.setLockedWidth(true); //write header String[] arr = data.get(0); for (int j = 0; j < ncol; j++) { table.addCell(new Phrase(arr[j], subFont)); } //write data for (int i = 1; i < data.size(); i++) { arr = data.get(i); for (int j = 0; j < ncol; j++) { table.addCell(new Phrase(arr[j], font8)); } } document.add(table); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } document.close(); return ServerPeer.getWebDownloadAddress() + "/" + rawFileName; } public static void main(String[] args) { System.out.println("write report"); String title = "Table Data"; int nrow = 100; int ncol = 4; ArrayList<String[]> data = new ArrayList<String[]>(); for (int i = 0; i < nrow; i++) { String[] row = new String[ncol]; for (int j = 0; j < ncol; j++) { row[j] = "val(" + i + "," + j + ")"; } data.add(row); } System.out.println("generated file: " + writeDataArrayToPdf("VHTam", data, title)); System.out.println("generated file: " + writeDataArrayToRtf("VHTam", data, title)); } private static String FILE = "d:/temp/FirstPdf.pdf"; 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); // iText allows to add metadata to the PDF which can be viewed in your Adobe // Reader // under File -> Properties private static void addMetaData(Document document) { document.addTitle("My first PDF"); document.addSubject("Using iText"); document.addKeywords("Java, PDF, iText"); document.addAuthor("Lars Vogel"); document.addCreator("Lars Vogel"); } 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.de ;-).", 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 little list createList(subCatPart); // Add a small table createTable(subCatPart); // Now a small table // 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 static void createTable(Section subCatPart) throws BadElementException { Table t = new Table(3, 2); t.setBorderColor(Color.GRAY); t.setPadding(4); t.setSpacing(4); t.setBorderWidth(1); Cell c1 = new Cell("Table Header 1"); c1.setHeader(true); t.addCell(c1); c1 = new Cell("Table Header 2"); t.addCell(c1); c1 = new Cell("Table Header 3"); t.addCell(c1); t.endHeaders(); t.addCell("1.0"); t.addCell("1.1"); t.addCell("1.2"); t.addCell("2.1"); t.addCell("2.2"); t.addCell("2.3"); subCatPart.add(t); } 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(" ")); } } }