我正在嘗試從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屬性等...)
我不認爲這是問題所在。我試圖打印的所有文件都有PDF-1.4版本。 – fgysin