使用 PDFBox 动态创建多页文档

2022-09-03 05:37:41

我正在尝试从 Java ResultSet 创建 PDF 报告。如果报告只有一页,我在这里没有问题。问题在于,报告的长度可能从一页到十页不等。现在,我有这个来创建一个单页文档:

PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document,page);

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


答案 1

正如我所料,答案是盯着我的脸,我只需要有人为我指出来。

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();

感谢@mkl的答案。


答案 2

要使用 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();

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


推荐