PDFレンダラーは私のPDFをねじ込みますか?
質問
Javaアプリケーション内からPDFファイルをサイレントしようとしています(より具体的にはJ2EE WebApp)。
このアプリケーションでは、iTextを使用してPDFファイルを作成しています。作成されたファイルはフォームレターで、それぞれが正確に1つのページで構成されています。
これらのPDFファイルをレンダリングして印刷するために、PDFレンダラーライブラリを使用しようとしました。 (こちらを参照: 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レンダラーを介してレンダリング/印刷する前に、これは完全に正常に機能しました。 (PDFプロパティなどにもフォントが表示されます...)
解決
たぶん、itextがレンダラーと互換性のないPDFファイルを作成しているのでしょうか?作成するPDFバージョンを確認しましたか?古いバージョンを指定することは可能ですか?