package gov.nysenate.openleg.client.view.hearing; import gov.nysenate.openleg.model.hearing.PublicHearing; import gov.nysenate.openleg.util.PublicHearingTextUtils; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; import java.io.IOException; import java.io.OutputStream; import java.util.List; /** * PDF representation of a Public Hearing. */ public class PublicHearingPdfView { private static Float fontSize = 12f; private static Float top = 740f; private static Float margin = 10f; public static void writePublicHearingPdf(PublicHearing publicHearing, OutputStream outputStream) throws IOException, COSVisitorException { if (publicHearing == null) { throw new IllegalArgumentException("Supplied Public Hearing cannot be null when converting to pdf."); } PDDocument doc = new PDDocument(); PDFont font = PDType1Font.COURIER; List<List<String>> pages = PublicHearingTextUtils.getPages(publicHearing.getText()); for (List<String> page : pages) { PDPage pg = new PDPage(); PDPageContentStream contentStream = new PDPageContentStream(doc, pg); contentStream.beginText(); contentStream.setFont(font, fontSize); contentStream.moveTextPositionByAmount(margin, top); drawPage(contentStream, page); contentStream.endText(); contentStream.close(); doc.addPage(pg); } doc.save(outputStream); doc.close(); } private static void drawPage(PDPageContentStream contentStream, List<String> page) throws IOException { for (String line : page) { contentStream.drawString(line); contentStream.moveTextPositionByAmount(0, -fontSize); } } }