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

在附加模式下使用CERTIFIED_NO_CHANGES_ALLOWED签署串联的PDF

潘星阑
2023-03-14

我尝试使用append模式和Certificate level CERTIFIED\u NO\u CHANGES\u签署PDF,但某些PDF文件显示为已修改,因此在Acrobat中无效。

itext 5.5.6,代码:

PdfStamper stp = PdfStamper.createSignature(reader, os,'\0',null,true);
PdfSignatureAppearance app = stp.getSignatureAppearance();
app.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED);

PDf文件使用wkhtmltopdf创建,并使用pdfunite(CentOS 7)将其自身连接起来

以下是zip和示例PDF:https://www.dropbox.com/s/lea6r9fup6th44c/test_pdf.zip?dl=0

g、 pdf-原始pdf
2g。pdf-连接版本(pdfunite g.pdf g.pdf 2g.pdf
signed\u g.pdf-原始签名文件,在Acrobat中看起来正常。pdf-串联签名文件,在Acrobat中看起来已损坏

那么,这是正确的行为,还是Acrobat、pdfunite、itext或我自己出了问题)?

谢谢

共有1个答案

罗晨
2023-03-14

验证样品2g。pdf使用OP代码并使用Adobe Reader one以外的其他工具验证结果,即可获得认证签名有效的信息。

类似的情况(即Adobe Reader抱怨完全有效的签名)通常发生在文档中,导致Adobe Reader在加载时操纵文档。在这种情况下,Adobe Reader会检查更改文档中的签名,因此会看到无效的签名。这种操作尤其可能是修复无效文件。

这里也是这种情况,2g.pdf不是完全有效的(即使PDF解析器通常忽略的方式):它的交叉引用表被分段为多个子部分:

xref
0 1
0000000001 65535 f
3 2
0000000015 00000 n
0000000107 00000 n
6 41
0000000146 00000 n
...
0000015682 00000 n
48 14
0000015864 00000 n
...
0000025433 00000 n
66 2
0000025455 00000 n
0000025548 00000 n
69 41
0000025588 00000 n
...
0000041144 00000 n
111 14
0000041327 00000 n
...
0000050929 00000 n
126 4
0000050952 00000 n
0000051004 00000 n
0000051075 00000 n
0000051242 00000 n

但是分段交叉引用表仅在增量更新的情况下有效,而在初始文档修订的情况下无效,并且该文档被构建为初始修订。

对于从未进行增量更新的文件,交叉引用部分应仅包含一个子部分,其对象编号从0开始。

(ISO 32000-1第7.5.4节交叉引用表)

因此,这个分段表是无效的。

因此,我将交叉引用表固定为只包含一个子部分(通过为遗漏的索引添加f(ree)条目:2g fix)。pdf。事实上,使用OP的代码认证此文档时,Adobe Reader(至少是我目前安装的XI版本)会得到一个认证签名。

因此,使用增量更新的缺点是:保留原始文档的错误,并且必须处理这些错误。。。

 类似资料:
  • 问题内容: Go具有出色的图像处理和数据库功能,但是我很难从较小的图像创建一个大图像。有谁知道如何在Golang中提取两个png或jpeg文件并将它们连接起来,形成一个包含两个(或更多)文件的大图像? 我目前正在读取png文件,如下所示: 我对如何获取此png RGBA数据并与其他RGBA数据连接和/或将其组合成“空”图像感到困惑。 问题答案: 创建一个新的空白图像(NewRGBA),其边界的大小

  • 问题内容: 我正在PDF页面之一上绘制图像。.当我用来绘制图像时,一切正常。.参见下图。 但是当我使用构造函数创建和绘制图像时,新添加的图像会上下颠倒。 没有弄明白这里出了什么问题.. PS。我正在使用库PdfBox-Android 问题答案: 使用具有第五个参数的构造函数,以便重置图形上下文。 或者,通过调用在第一个内容流中保存和恢复图形状态

  • 在https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#handing-lat-data-and-watermarking的文档中,显示了一个使用10分钟窗口、10分钟水印和5分钟触发器的示例。 在使用追加模式时的关系图中,12:00:00->12:10:00窗口的第一个结果仅显示在12:2

  • 我目前正在使用FileWriter创建并写入文件。有没有什么方法可以每次都写入同一个文件而不删除其中的内容?

  • 问题内容: 我想建立一个不牺牲SEO的ajax网站。我的问题是:如果我的页面上有这样的链接: …当单击每个链接时,我想用相应的标签更新地址栏。因此,如果单击“猫”链接,则当前位置为http://example.com/#cats,我可以用它来显示我的Ajax内容。如果javascript关闭或用户是搜索引擎,他们将直接转到/ cats 问题答案: 您可以更改属性,它会更改当前的锚标识符,而无需导航

  • 我正在一个PDF页面上画一张图片。。当我使用