我目前正在开展的项目需要大量印刷文件,这些文件将邮寄给客户。例如,单个打印运行可能包含1000多个字母,每个字母将转到不同的客户端。
要生成此打印运行,外部服务(即不使用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的结构中时,事情开始变得非常冒险,并且没有任何事情因为不合适而跳出来。知道会发生什么事吗?
答案 0 :(得分:0)
好吧,我想我可能已经解决了这个问题。看起来有些字母是用“A4”纸设计的,而不是“字母”。如果我只是查看Acrobat Reader中的文件,它看起来非常好,如果我从那里打印字母,Reader必须自动将输出压缩到可用的纸张尺寸上。不幸的是,PDFBox似乎没有做同样的挤压。因此,当通过PDFBox进行打印时,这封信会稍微延伸到下一页,导致我看到的奇怪行为。
我还没有机会测试这个理论......信函开发人员发现了这个错误,但他的更改还没有放在我们的测试服务器上。如果这不能解决问题,我会报告回来。