Create mutli-page document dynamically using PDFBox

前端 未结 2 1413
暗喜
暗喜 2021-02-19 05:33

I am attempting to create a PDF report from a Java ResultSet. If the report was only one page, I would have no problem here. The issue comes from the fact that the report coul

相关标签:
2条回答
  • 2021-02-19 06:11

    As I expected, the answer was staring me right in the face, I just needed someone to point it out for me.

    PDDocument document = new PDDocument();
    PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
    document.addPage(page);
    PDPageContentStream content = new PDPageContentStream(document,page);
    
    //generate data for first page
    
    content.close();
    
    //if number of results exceeds what can fit on the first page
    page = new PDPage(PDPage.PAGE_SIZE_LETTER);
    document.addPage(page);
    content = new PDPageContentStream(document,page);
    
    //generate data for second page
    
    content.close();
    

    Thanks to @mkl for the answer.

    0 讨论(0)
  • 2021-02-19 06:20

    To Create Multi Page PDF Document using PDFBox:

    (a) Create new page, new content stream, Move to Top Left, start writing. While writing each word check whether space required is not crossing mediabox width. If crosses, move to next line leftmost and start writing. Continue writing till the last line of the page.

    (b) Close the contentStream and add the current page to the document when the writing operation reaches the last line of the current page,

    (c) Repeat steps (a) and (b) till the last record/row/line is written.

            PDDocument document = new PDDocument();
            PDFont font = PDType1Font.HELVETICA;
    
    //For Each Page:
            PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            contentStream.setFont(font, 12);
            contentStream.beginText();
            contentStream.moveTextPositionByAmount(100, 700);
            contentStream.drawString("PDF BOX TEXT CONTENT");
            contentStream.endText();
            contentStream.close();
            document.addPage(page);
    
    //After All Content is written:
            document.save(pdfFile);
            document.close();
    

    Hint: Use Font parameters like size/height and remaining media box height to determine the last line of the page.

    0 讨论(0)
提交回复
热议问题