我正在使用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异常。有没有更好的方法来做到这一点?我怎样才能限制资源?我无法使用叠加类,因为它没有选择性叠加页面的功能。任何帮助表示赞赏! –