package nl.itopia.corendon.pdf; import com.itextpdf.text.BadElementException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.Image; import java.awt.Desktop; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; import javafx.embed.swing.SwingFXUtils; import javafx.scene.chart.Chart; import javafx.scene.image.WritableImage; import javax.imageio.ImageIO; import nl.itopia.corendon.model.EmployeeModel; /** * * @author Igor's_Boven */ public class ManagerStatisticsPDF { private static Font titleFont = new Font(Font.FontFamily.TIMES_ROMAN, 22, Font.BOLD); private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD); private static Image graph; public static void generateManagerReportPDF(File file, Chart chart){ try { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(file)); document.open(); addContent(file, document, chart); document.close(); } catch (Exception e) { e.printStackTrace(); } } private static void addContent(File file, Document document, Chart chart) throws DocumentException, BadElementException, IOException { Paragraph paragraph = new Paragraph(); addEmptyLine(paragraph, 1); // TITLE paragraph.add(new Paragraph("Manager luggage statistics report", titleFont)); addEmptyLine(paragraph, 1); String username = (EmployeeModel.getDefault().currentEmployee.username); paragraph.add(new Paragraph("Report generated by: " + username + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ smallBold)); addEmptyLine(paragraph, 3); paragraph.add(new Paragraph("This document is a report of Manager statistics of the lost luggage system.", smallBold)); addEmptyLine(paragraph, 4); //Convert LineChart byte by byte to WritableImage WritableImage wi = chart.snapshot(null,null); ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); try { ImageIO.write(SwingFXUtils.fromFXImage(wi, null), "png", byteOutput); } catch(Exception s) { System.out.println("Something went wrong with generating graph in PDF."); } graph = Image.getInstance(byteOutput.toByteArray()); document.add(paragraph); document.add(graph); //OPEN PDF AFTER CREATION try { Desktop.getDesktop().open(file); } catch (IOException ex) { System.out.println("You need to have default program set to open .PDF files."); } } private static void addEmptyLine(Paragraph paragraph, int lines) { for (int i = 0; i < lines; i++) { paragraph.add(new Paragraph(" ")); } } }