Java PDFBOX 1.8.9覆盖两个PDF文档:当前不支持使用COSArray的布局页面
我想使用ApachePDFBox(1.8.9)库在现有PDF文档上打印白色/不可见文本,因此我创建了一个新文档,将文本添加到Color.white中,并使用“overlay”方法将两个文档合并在一起。 通过这样做,我遇到了以下问题:Java PDFBOX 1.8.9覆盖两个PDF文档:当前不支持使用COSArray的布局页面,java,pdf,overlay,pdfbox,Java,Pdf,Overlay,Pdfbox,我想使用ApachePDFBox(1.8.9)库在现有PDF文档上打印白色/不可见文本,因此我创建了一个新文档,将文本添加到Color.white中,并使用“overlay”方法将两个文档合并在一起。 通过这样做,我遇到了以下问题: java.lang.UnsupportedOperationException: Layout pages with COSArray currently not supported. at org.apache.pdfbox.Overlay.collectLayo
java.lang.UnsupportedOperationException: Layout pages with COSArray currently not supported.
at org.apache.pdfbox.Overlay.collectLayoutPages(Overlay.java:269)
at org.apache.pdfbox.Overlay.overlay(Overlay.java:224)
at com.db.jocr.Main.overlay(Main.java:194)
at com.db.jocr.Main.main(Main.java:91)
代码如下所示:
realDoc = PDDocument.load(pathInputDoc);
String pathWatermarkDoc = createWhiteOnWhiteDoc(text, pageCount, color);
watermarkDoc = PDDocument.load(pathWatermarkDoc);
Overlay overlay = new Overlay();
overlay.overlay(realDoc,watermarkDoc);
- 代码抛出异常的第194行是“overlay.overlay(doc1,doc2)”命令
- 我在ApacheMailingList上发现了一个类似的问题(从2009年开始,显然没有答案)和一条关于stackoverflow的评论(从2012年开始)
- 我测试的大多数PDF文档都不会出现这种情况->这是“基于tif”的PDF示例文档(而不是“基于文本”)的问题
- 我还发现了一个使用“OverlayPDF”类->的提示,它显然不再包含在PDFBOX 1.8.9中
COSBase contents = page.getCOSDictionary().getDictionaryObject( COSName.CONTENTS );
if( contents instanceof COSStream )
{
...
}
else if( contents instanceof COSArray )
{
throw new UnsupportedOperationException("Layout pages with COSArray currently not supported.");
// layoutPages.add(new LayoutPage(contents, res));
}
有人能给我解释一下costream和COSArray之间的区别,以及为什么不支持COSArray页面吗
感谢你给我的任何暗示,告诉我正确的方向
谢谢,丹尼尔
注:我正在从事的项目是:
编辑:好的,我有点问题:
OverlayPDF类似乎在PDFBOX中,但我似乎找到了一个可行的解决方法: 不要使用Overlay.class,而是使用OverlayPDF.class,它为原始PDF添加了一些布局,这样您也可以覆盖“基于tif”的PDF文件。OverlayPDF.class的接口看起来很奇怪(没有方法,只有main()),但它可以处理我所有的测试PDF文件,下面是代码:
String[] args = {pathInputDoc, pathWatermarkDoc, pathOutputDoc};
OverlayPDF.main(args);
我仍然不确定OverlayPDF.class中发生了什么——所以如果有人能解释的话——那就太好了