SetPDFXConformance
不會將「普通」PDF轉換爲PDF/X pdf。 SetPDFXConformance
實際上只是用於生成文檔,導致iText拋出一個異常,如果你做了一些明顯的規範。 「它不關心我在那裏設置的東西」。修剪和流血框不是在Reader中可以看到的東西。你如何測試它們?
您可以發佈一些代碼,並鏈接到您的輸出PDF?
啊。你正在使用stamper.Writer。在這種情況下,這樣做效果不佳。所有頁面級別,通過PdfStamper支持的操作都會將頁碼或頁面的PdfDictionary作爲參數。 SetBoxSize只需要一個字符串&一個矩形,所以這是你的線索。
將「引擎蓋下」放在原位,實際上是默認返回到PdfWriter.setBoxSize ...,它僅用於創建PDF,不會修改現有頁面。
因此:您需要使用低級PDF對象進行所需的更改。無Problemo:
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();
至於PDFX32002一致性,我認爲你將不得不去的代碼跳水找出需要的到底是什麼。 Writer.PDFXConformance
是Writer
的另一個方面,它只在生成PDF時才起作用,不會修改現有的PDF。
好消息是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 2011-02-01 09:25:48