2009-12-16 91 views
0

我正在尝试从java应用程序(更具体地说是J2EE Webapp)中静默打印PDF文件。PDF渲染器搞砸了我的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文件后,莫名其妙地搞砸了。它仍然具有可读性和一切,但是整个格式变得有点疯狂。线条刹车,他们不应该,错误文物在图像包含,文本的无线突然突然更长或更短,因为假设...

此外什么打印也是这个'hacked'版本...所以我猜错误必须在渲染过程中的某个地方。

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

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属性等...)

回答

0

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

+0

我不认为这是问题所在。我试图打印的所有文件都有PDF-1.4版本。 – fgysin