【发布时间】:2015-09-19 14:24:12
【问题描述】:
我想使用 Apache PDFBOX (1.8.9) 库在现有 PDF 文档上打印白色/不可见文本,因此我创建了一个新文档,在 Color.WHITE 中添加文本并使用“叠加”方法进行合并两个文件在一起。 通过这样做,我遇到了以下问题:
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)”命令
- 我在 apache 邮件列表上发现了一个类似的问题(从 2009 年开始,显然没有答案,https://mail-archives.apache.org/mod_mbox/pdfbox-users/200902.mbox/%3CCAEMKNBIAMMLAJEHPHCEGEALBAAB.bvstone@gmail.com%3E)和对 stackoverflow 的评论(从 2012 年开始,Watermarking with PDFBox)
- 我测试的大多数 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));
}
谁能给我解释一下 COSStream 和 COSArray 的区别是什么以及为什么不支持 COSArray-pages?
感谢任何为我指明正确方向的提示,
谢谢,丹尼尔
P.S.:我正在做的项目是:https://github.com/dbrenk/JOCR
编辑:好的,我出了点问题: OverlayPDF 类似乎仍在 PDFBOX 中
【问题讨论】: