我目前正在处理的项目需要大量打印文件,并将其邮寄给客户。例如,一个单独的打印任务可能包括1000多封信件,每一封信都会寄给不同的客户。
为了生成这个打印任务,一个外部服务(即不使用PDFBox)首先将每个信件作为单独的PDF文件生成。然后我的代码加载所有这些PDF文件,使用PDFBox合并它们(以便可以作为单个作业在打印室中打印),并在前面添加一个“横幅页面”(也使用PDFBox),告诉打印室如何处理这些信件。
所有东西都是双面打印的。但由于每个信件都要寄给不同的客户,我不能让两封信件在同一张纸上背面打印。这意味着任何具有奇数页数的信件都需要添加一个空白页。就在打印之前,一个非常小的打印任务的合并PDF文档只包含两封信,可能看起来像这样:
但这就是我的问题所在。我使用了以下代码添加空白页面:
打印输出的结果如下:
我曾尝试通过
为了生成这个打印任务,一个外部服务(即不使用PDFBox)首先将每个信件作为单独的PDF文件生成。然后我的代码加载所有这些PDF文件,使用PDFBox合并它们(以便可以作为单个作业在打印室中打印),并在前面添加一个“横幅页面”(也使用PDFBox),告诉打印室如何处理这些信件。
所有东西都是双面打印的。但由于每个信件都要寄给不同的客户,我不能让两封信件在同一张纸上背面打印。这意味着任何具有奇数页数的信件都需要添加一个空白页。就在打印之前,一个非常小的打印任务的合并PDF文档只包含两封信,可能看起来像这样:
Banner Page
Blank
Letter 1
Blank
Letter 2
Blank
但这就是我的问题所在。我使用了以下代码添加空白页面:
PDFMergerUtility docMerger = new PDFMergerUtility();
for (PDDocument currDoc : documents) {
// Add blank page to document if odd number
if (currDoc.getNumberOfPages() % 2 != 0) {
currDoc.addPage(new PDPage());
}
// Merge into single document
docMerger.appendDocument(mergedDoc, currDoc);
// Close currDoc
currDoc.close();
}
这种方法似乎在横幅页面上一直有效,但对于某些类型的信件,它会出现问题。如果我打开生成的PDF文件,看起来还好,但当我打印时,每封信之间都会多出一张空白纸张。
所以虽然我在Acrobat Reader(甚至是PDFBox的阅读器)中看到了这个问题:
Sheet 1: Banner Page
Sheet 2: Letter 1
Sheet 3: Letter 2
打印输出的结果如下:
Sheet 1: Banner Page
Sheet 2: Letter 1
Sheet 3: BLANK!
Sheet 4: Letter 2
Sheet 5: BLANK!
同时,如果我将new PDPage()
这段代码删除,不管是在Acrobat还是打印输出中,都会得到以下结果:
Sheet 1: Banner Page
Sheet 2: Letter 1 (front) AND Letter 2 (back)
我曾尝试通过
PDDocument.silentPrint(PrinterJob)
进行调试,但当它深入PDF结构时事情变得非常复杂,没有明显的错误。你有什么想法吗?