当前位置: 首页 > 知识库问答 >
问题:

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

麹培
2023-03-14

我想使用Apache PDFBOX(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);
  • 代码抛出异常的第194行是overlay.overlay(doc1, doc2)命令
  • 我在apache邮件列表上发现了一个类似的问题(从2009年开始,显然没有答案,https://mail-archives.apache.org/mod_mbox/pdfbox-users/200902.mbox/ )和对stackoverflow的评论(从2012年开始,使用PDFBox进行水印)
  • 我测试的大多数PDF文档都不会发生这种情况-

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

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

感谢任何指引我走向正确方向的暗示,

谢谢丹尼尔

P、 S:我正在从事的项目是:https://github.com/dbrenk/JOCR

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

共有1个答案

仇睿
2023-03-14

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

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

我仍然不确定OverlayPDF中发生了什么。上课-如果有人能解释的话-那就太好了。

 类似资料:
  • 我有一个pdf模板,我试图在新文档中重写它。我需要从模板PDF中获取一些字段,并在新的PDF中重写它们的值。我这样做: 但我发现了一个例外: iText。内核PDFEException:“没有用于生成间接项的关联PdfWriter。” 我做错了什么以及如何修复它?这是第七次。

  • 问题内容: with open(“games.txt”, “w”) as text_file: print(driver.current_url) text_file.write(driver.current_url + “\n”) 我现在正在使用此代码,但是当它写入文件时,它将覆盖旧内容。我如何能简单地添加它而不删除已经存在的内容。 问题答案: 而不是使用(附加)功能模式:

  • 我使用boto3(aws sdk for python)来分析文档(pdf)以获得表单键:值对。 我使用Analyze Document遵循了AWS的文档,当我运行我的函数时,我得到了错误。 我错过什么了吗?

  • 问题内容: 我的网站目前已经被自动纳入该网站的一部分,3个CSS文件,我也 没有 访问源即 index.html的 网站 ,但我有 访问我的网站的CSS文件。 我正在尝试使用自己的样式来覆盖我的网站CSS文件,并创建一个新的CSS文件,其中包含我要在网站上覆盖的所有样式。 我尝试使用,并将其放在最后一个CSS文件的顶部,但这不会覆盖最后一个CSS文件的样式。 我该如何实现? 问题答案: 除了使用大

  • 清单文件Android:Windowsoftinputmode=“AdjustPanAdjustReadstresizeStateVisible”我想在键盘显示和标题栏不熄灭时在键盘顶部显示serachview。有什么办法吗?XMl页面

  • 问题内容: 在Golang中,是否有一种方法可以使通用元帅在编组字段时使用不同的布局? 基本上我有这个结构: 并且我想使用的函数编码为json ,但我想使用自定义布局,我想正在调用某个地方,我想控制该布局, 问题答案: 受zeebo的回答启发,并在该评论的注释中进行了散列: http://play.golang.org/p/pUCBUgrjZC 此解决方案将 time.Time 嵌入 jsonTi