2009-12-16 97 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