PDF渲染器搞砸了我的PDF文件?

时间:2009-12-16 15:01:47

标签: java pdf printing renderer

我正在尝试从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呢?据我所知,这个scource代码,READ_ONLY模式应该完全阻止......

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

1 个答案:

答案 0 :(得分:0)

也许iText正在创建与渲染器不兼容的PDF文件?你检查了它创建的PDF版本吗?也许可以指定旧版本?