有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java PDFBOX 1.8.9覆盖两个PDF文档:当前不支持使用COSArray的布局页面

我想使用ApachePDFBox(1.8.9)库在现有PDF文档上打印白色/不可见文本,因此我创建了一个新文档,添加彩色文本。白色,并使用“覆盖”方法将两个文档合并在一起。 通过这样做,我遇到了以下问题:

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);

显然“导致”错误消息的代码也没有提示我如何修复:

        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页面吗

感谢你给我的任何暗示,告诉我正确的方向

谢谢,丹尼尔

注:我正在做的项目是:https://github.com/dbrenk/JOCR

编辑:好的,我有点问题: OverlayPDF类似乎仍在PDFBOX中


共 (1) 个答案

  1. # 1 楼答案

    看来我找到了一个可行的解决办法: 而不是使用覆盖。类使用OverlayPDF。类,它向原始PDF添加一些布局,以便您也可以覆盖“基于tif的”PDF文件。OverlayPDF的接口。类看起来很奇怪(没有方法,只有main()),但它可以处理我所有的测试PDF文件,下面是代码:

    String[] args = {pathInputDoc, pathWatermarkDoc, pathOutputDoc};
    OverlayPDF.main(args);
    

    我仍然不太清楚OverlyPDF到底发生了什么。上课——如果有人能解释的话——那就太好了