使用PDFBox动态创建多页面文档

Liq*_*mer 13 java pdf pdfbox

我正在尝试从Java ResultSet创建PDF报告.如果报告只有一页,我在这里没问题.问题来自报告可能长达一到十页的事实.现在,我有这个来创建一个单页文档:

PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document,page);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何在需要时动态创建页面.是否有一个面向对象的答案盯着我的脸,我只是看不到它?

Liq*_*mer 15

正如我所料,答案就是盯着我,我只需要有人为我指出.

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();
Run Code Online (Sandbox Code Playgroud)

感谢@mkl的回答.

  • 您能指定一下如何知道"如果结果的数量超出第一页的适用范围"吗?谢谢 (7认同)
  • 从 PDFBox 2.0.20 开始,页面大小常量现在位于“PDRectangle”类中。因此,创建一个新页面可以使用“PDPage page = new PDPage(PDRectangle.LETTER);”来完成 (2认同)

AVA*_*AVA 8

使用PDFBox创建多页PDF文档:

(a)创建新页面,新内容流,向左上移动,开始书写.在写每个单词时检查所需的空间是否不超过媒体盒宽度.如果是十字架,则移到最左边的下一行并开始书写.继续写到页面的最后一行.

(b)当写入操作到达当前页面的最后一行时,关闭contentStream并将当前页面添加到文档中.

(c)重复步骤(a)和(b)直到写入最后一条记录/行/行.

        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();
Run Code Online (Sandbox Code Playgroud)

提示:使用大小/高度等字体参数和剩余媒体框高度来确定页面的最后一行.