SetPDFXConformance
は、「通常の」PDFをPDF/Xのpdfに変換しません。 SetPDFXConformance
は実際には文書生成のためのものであり、仕様を外れるとiTextは例外をスローします。
「私が設定したものは気にしない」トリムとブリードボックスは、Readerで目に見えるものではありません。あなたはどうやってそれらをテストしていますか?
いくつかのコードと出力PDFへのリンクを投稿できますか?
ああ。あなたはスタンパーを使用しています.Writer。この場合、それはうまくいかない。すべてのページレベル、PdfStamper経由のよくサポートされるアクションは、ページ番号またはページのPdfDictionaryを引数として取ります。 SetBoxSizeはちょうど文字列&を四角形にしているので、それはあなたの手がかりです。
あなたが行っているように、実際にはデフォルトのPdfWriter.setBoxSize ...は、PDFを作成するためのもので、既存のページは変更しません。
So:低レベルのPDFオブジェクトを使用して、必要な変更を加える必要があります。いいえProblemo:PDFX32002の適合性については
for (int i = 1; i <= myReader.getNumberOfPages(); ++i) {
PdfDictionary pageDict = myREADER_YES_READER.getPageN(i);
PdfRectangle newBox = new PdfRectangle(20, 20, 100, 100);
pageDict.put(PdfName.TRIMBOX, newBox);
newBox = new PdfRectangle(PageSize.A4);
pageDict.put(PdfName.MEDIABOX, newBox);
}
/* drawing */
stamper.close();
、私はあなたが必要とされている正確に何を把握するために、コードのダイビングに行く必要があるとしていると思うん。 Writer.PDFXConformance
は、既存のものを変更せずに、PDFを生成するときにのみ機能するWriter
の別の側面です。
良いニュースは、PdfXConformanceImpがパブリッククラスであることです。悪い知らせは、それがPdfWriterとPdfContentByteによって内部的にのみ使用されていることです...ねえ。あなたは、現在のコードで動作のいくつかの変更を取得しています(不十分です)。具体的には、そのPdfContentByte内で許可されていないものを試してみると、あなたが違反した制限を記述したPdfXConformanceExceptionが出ます。オプションのコンテンツグループ(レイヤー)を追加しようとすると、たとえばスローされます。
ああ。それほど悪くはありません。多分。これを試してみてください:
PDFXConformanceImp pdfx = new PDFXConformanceImp();
pdfx.setConformance(PdfWriter.PDFX32002);
pdfx.commpleteInfoDictionary(stamper.Writer.getInfo());
pdfx.completeExtraCatalog(stamper.Writer.getExtraCatalog());
stamper.close();
あなたがstamper.Writer.PDFXConformance = PdfWriter.PDFX32002;
をドロップすると、あなたのcontentByteで禁断の何かをするとき、あなたは例外を取得することはできません。それ以外は、私はそれが重要ではないと思う。
うーん。それはすべての解決策ではありません。extraCatalogのOutputIntentsもメインカタログにマージされます。おそらくこれはうまくいくでしょう:
//replace the completeExtraCatalog call above with this
pdfx.completeExtraCatalog(myReader.getCatalog());
私はあなたが幸いです。
質問を更新しました – SteMa