package fi.lpam.tulostajat; import fi.lpam.dataluokat.RaporttiRivi; import java.awt.print.PrinterJob; import java.time.LocalDate; import java.util.ArrayList; import fi.lpam.gui.virheDialogit.SiirtoVirhe; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.printing.PDFPageable; @SuppressWarnings("DuplicatedCode") public class KuljetusRaporttiTulostaja extends Tulostaja { public static void luoRaportti(ArrayList raporttiRivit, LocalDate alkuPvm, LocalDate loppuPvm) { int rivitPerSivu = 44; try (PDDocument dokumentti = new PDDocument()) { PDPage sivu = new PDPage(); dokumentti.addPage(sivu); PDPageContentStream sisältö = new PDPageContentStream(dokumentti, sivu); sisältö.beginText(); sisältö.setFont(fontti, fonttiKoko); sisältö.setLeading(leading); sisältö.newLineAtOffset(25,750); sisältö.showText("Raportti aikaväliltä " + alkuPvm + " - " + loppuPvm); sisältö.newLineAtOffset(0, -25); int riviLaskuri = 2; for (RaporttiRivi rivi : raporttiRivit) { String[] teksti = rivi.toString().split("\n"); for (String t : teksti) { if (riviLaskuri % rivitPerSivu == 0) { sisältö.endText(); sisältö.close(); PDPage uusiSivu = new PDPage(); dokumentti.addPage(uusiSivu); sisältö = new PDPageContentStream(dokumentti, uusiSivu); sisältö.beginText(); sisältö.setFont(fontti, fonttiKoko); sisältö.setLeading(leading); sisältö.newLineAtOffset(25,750); } sisältö.showText(t); riviLaskuri++; sisältö.newLine(); } sisältö.newLineAtOffset(0, -5); } sisältö.endText(); sisältö.close(); PrinterJob tuloste = PrinterJob.getPrinterJob(); tuloste.setPageable(new PDFPageable(dokumentti)); if (tuloste.printDialog()) { tuloste.print(); } } catch (Exception e) { SiirtoVirhe virhe = new SiirtoVirhe(e); virhe.showAndWait(); } } }