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

在此应用程序中,我正在使用ITEXT创建PDF文件。创建的文件是表单字母,每个字母完全由一个页面组成。

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

我发现了一些有用的示例代码 http://juixe.com/techknows/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?据我了解,读取模式应完全阻止...

编辑:我刚刚看到打印Itext创建的PDF还删除了嵌入式字体。同样,在通过PDF-Renderer渲染/打印之前,这效果很好。 (字体也显示在PDF属性等等。...)

有帮助吗?

解决方案

也许ITEXT创建与您的渲染器不兼容的PDF文件?您是否检查过它创建了什么PDF版本?也许可以指定旧版本?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top