我正在使用pdfbox來操作PDF內容。我有一個很大的PDF文件(比如500頁)。我還有一些其他單頁PDF文件,其中只包含單個圖像,每個文件最大大小爲8-15kb。我需要做的是將這些單頁PDF導入到大PDF文件的特定頁面上。PDFBox LayerUtility - 將圖層導入到現有PDF中
我已經嘗試了pdfbox的LayerUtility,我已經成功了,但它創建了一個非常大的文件作爲輸出。源代碼pdf在處理之前大約爲1MB,並且在添加較小的pdf文件時,大小可以達到64MB。有時我需要將兩個較小的PDF包含在較大的PDF中。
有沒有更好的方法來做到這一點,或者我只是做這個錯誤?下面張貼嘗試添加兩層到單個頁面代碼:
...
...
..
overlayDoc[pCounter] = PDDocument.load("data\\" + overlay + ".pdf");
outputPage[pCounter] = (PDPage) overlayDoc[pCounter].getDocumentCatalog().getAllPages().get(0);
LayerUtility lu = new LayerUtility(overlayDoc[pCounter]);
form[pCounter] = lu.importPageAsForm(bigPDFDoc, Integer.parseInt(pageNo)-1);
lu.appendFormAsLayer(outputPage[pCounter], form[pCounter], aTrans, "OVERLAY_"+pCounter);
outputDoc.addPage(outputPage[pCounter]);
mOverlayDoc[pCounter] = PDDocument.load("data\\" + overlay2 + ".pdf");
mOutputPage[pCounter] = (PDPage) mOverlayDoc[pCounter].getDocumentCatalog().getAllPages().get(0);
LayerUtility lu2 = new LayerUtility(mOverlayDoc[pCounter]);
mForm[pCounter] = lu2.importPageAsForm(outputDoc, outputDoc.getNumberOfPages()-1);
lu.appendFormAsLayer(mOutputPage[pCounter], mForm[pCounter], aTrans, "OVERLAY_2"+pCounter);
outputDoc.removePage(outputPage[pCounter]);
outputDoc.addPage(mOutputPage[pCounter]);
...
...
您的代碼不幸的是,有些不完整。如何將其他頁面放入outputDoc並不明顯。 'pCounter'變量似乎表明您對每個頁面執行類似於上面的操作,在這種情況下,文件大小爆炸並不奇怪,因爲涉及一些深度副本可能會使共享資源倍增。 – mkl
是的,pCounter是理想的頁面總數。我唯一的選擇是使用數組,因爲上面的代碼在循環中運行,直到保存outputDoc,我需要將每個頁面的數據存儲在單獨的地方,或者我碰到COSVisitor異常。有沒有更好的方法來做到這一點?我怎樣才能限制資源?我無法使用疊加類,因爲它沒有選擇性疊加頁面的功能。任何幫助表示讚賞! –