0

我正在尝试从 Java 应用程序(更具体地说是 J2EE Webapp)中静默打印 PDF 文件。

在这个应用程序中,我正在使用 iText 创建 PDF 文件。创建的文件是套用信函,每个信函只包含一页。

为了渲染和打印这些 PDF 文件,我尝试使用 pdf-renderer 库。(见这里:https ://pdf-renderer.dev.java.net/ )

我在http://juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/找到了一些有用的示例代码能够从我的工作机器打印第一个文档。

但现在有趣的部分来了:

打印每个 PDF 文件后,不知何故搞砸了。它仍然是可读的,但整个格式有点疯狂。不应该出现的线刹车,包含的图像中的错误伪影,文本的下划线突然变长或变短......

此外,打印的也是这个“破解”版本......所以我猜错误必须在渲染过程中的某个地方。

这是负责整个渲染和打印过程的源代码:

File f = this.file; //This accesses the created PDF file

FileInputStream fis = new FileInputStream(f);

FileChannel fc = fis.getChannel();

ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());

PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page

PDFPrintPage pages = new PDFPrintPage(pdfFile);



// Create Print Job

PageFormat pf = PrinterJob.getPrinterJob().defaultPage();

pjob.setJobName(f.getName());

Book book = new Book();

book.append(pages, pf, pdfFile.getNumPages());

pjob.setPageable(book);

另一个有趣的事实:PDF 的搞砸只发生在创建的 iText PDF 文档上。如果我尝试打印一些随机的其他 PDF,它不会被破坏。

关于问题可能是什么的任何想法?渲染如何影响我的 PDF?据我了解这个源代码,READ_ONLY 模式应该完全防止......

编辑:我刚刚看到打印 iText 创建的 PDF 也会删除嵌入的字体。同样,在通过 pdf-renderer 渲染/打印之前,这非常好。(字体也出现在 PDF 属性等中......)

4

1 回答 1

0

也许 iText 正在创建与您的渲染器不兼容的 PDF 文件?您是否检查过它创建的 PDF 版本?也许可以指定一个旧版本?

于 2009-12-16T15:07:12.133 回答