Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.vigglet.pdf; import com.vigglet.oei.service.ServiceUtil; import com.vigglet.oei.service.Service; import com.vigglet.oei.vehicle.Vehicle; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; /** * * @author vikn */ public class PdfUtil { public static final File PDF_TEMP_DIRECTORY = new File("E:/temp"); public static final String PDF_TEMP_PREFIX = "pdf"; public static final String PDF_TEMP_SUFFIX = ".pdf"; private static final Logger logger = Logger.getLogger(PdfUtil.class.getName()); private PDDocument doc; public PdfUtil() { doc = new PDDocument(); } private String getBaconIpsim() { return "Bacon ipsum dolor amet consequat beef ribs shank excepteur tail nostrud alcatra sirloin voluptate turkey. Prosciutto dolor shank boudin excepteur ham pariatur aute non. Ullamco chicken ut eu. Jerky ut pancetta voluptate drumstick ground round excepteur short loin dolor salami in porchetta pork chop tongue. Pig drumstick chuck brisket, in do filet mignon nisi beef t-bone. Sausage rump ex ut, corned beef shank filet mignon prosciutto dolore. T-bone porchetta tail ut pig labore cow prosciutto rump beef ribs velit frankfurter.\n" + "\n" + "Laborum short loin tenderloin, esse occaecat ut dolor do ribeye veniam shank ground round fatback deserunt labore. Frankfurter officia incididunt qui, cupim minim nisi in fugiat ut prosciutto boudin andouille quis ut. Anim ball tip kielbasa ad excepteur meatball, est tongue boudin ground round minim in shoulder. Shoulder pig swine sausage, frankfurter chuck laborum aliqua meatball kielbasa.\n" + "\n" + "Minim tenderloin ipsum cupim elit, picanha nostrud excepteur. Turducken shank nostrud ground round qui. Meatloaf aute dolore cupidatat in tenderloin ball tip chuck pig. Minim shankle kevin ball tip, ea boudin chuck sausage et sed bacon. Bacon porchetta beef ribs, cupidatat anim labore t-bone tri-tip. Incididunt meatball venison aliquip.\n" + "\n" + "Pastrami nostrud rump mollit. Nulla quis ground round ut lorem short ribs consectetur. Chicken turducken elit, laborum eiusmod brisket est deserunt pastrami ut. Ground round ipsum jerky magna, deserunt pork frankfurter ut. Esse short loin fugiat venison laboris brisket.\n" + "\n" + "Ball tip ea beef ribs shankle enim turducken strip steak irure et consequat laborum pork chop hamburger. Leberkas quis jerky hamburger t-bone pastrami kielbasa in shank duis sirloin excepteur minim alcatra. Shoulder sirloin drumstick landjaeger cupim turkey eiusmod jerky. Fatback ham hock proident turkey chicken id eiusmod capicola prosciutto dolore turducken lorem drumstick salami occaecat. Kevin ground round duis anim adipisicing, pariatur minim ex corned beef landjaeger pork. Landjaeger beef ribs cillum meatball chicken. Lorem ex ham hock, ad tenderloin excepteur ut pork spare ribs drumstick pastrami eiusmod dolore culpa."; } private void log(String msg) { logger.log(Level.INFO, msg); } public void test() { long startMs = System.currentTimeMillis(); log("Creating service report..."); try { PdfPage page = new PdfPage(doc); page.addHeader("FOOBAR"); List<String> headers = new ArrayList<>(); headers.add("#"); headers.add("Bacon"); headers.add("Ham"); headers.add("Pork"); headers.add("Rib"); headers.add("Beef"); List<List<String>> rows = new ArrayList<>(); int i = 0; long loopStartMs = System.currentTimeMillis(); while (i++ < 300) { for (Service service : ServiceUtil.getInstance().getPkMap()) { // ServiceUtil.getInstance().getPkMap().stream().map((service) -> { List<String> row = new ArrayList<>(); row.add("" + i); row.add(service.getVehicleString()); row.add(service.getTechnicianString()); row.add(service.getDateString()); row.add(service.getVehicleString()); row.add(service.getVehicleString()); // return row; rows.add(row); // }).forEach((e) -> rows.add(e)); } } long loopEndMs = System.currentTimeMillis(); log("Fetching data in " + (loopEndMs - loopStartMs) + " ms (" + (loopEndMs - loopStartMs) / 1000 + " s)"); page.drawTable("THIS IS HEDAER", headers, rows); page.closeAndSave(); page.addNewPage(); // page.addHeader("FOOBAR"); // page.closeAndSave(); for (PDPage foo : page.getPDPages()) { doc.addPage(foo); } // doc.addPage(page.getPDPages()); doc.save("E:/temp/pdf-" + System.currentTimeMillis() + ".pdf"); doc.close(); } catch (IOException ex) { Logger.getLogger(PdfUtil.class.getName()).log(Level.SEVERE, null, ex); } catch (COSVisitorException ex) { Logger.getLogger(PdfUtil.class.getName()).log(Level.SEVERE, null, ex); } // catch (TransformerException ex) { // Logger.getLogger(PdfUtil.class.getName()).log(Level.SEVERE, null, ex); // } long endMs = System.currentTimeMillis(); log("Done in " + (endMs - startMs) + " ms (" + (endMs - startMs) / 1000 + " s)"); } private void addMetaData() { // add XMP metadata // XMPMetadata xmp = new XMPMetadata(); // { // PDMetadata metadata = new PDMetadata(doc); //// metadata.importXMPMetadata(baos.toByteArray()); // // // XMPSchemaPDFAId pdfaid = new XMPSchemaPDFAId(xmp); // xmp.addSchema(pdfaid); // pdfaid.setConformance("B"); // pdfaid.setPart(1); // pdfaid.setAbout(""); // metadata.importXMPMetadata(xmp); // doc.getDocumentCatalog().setMetadata(metadata); // } } }