使用 iText7 获取 pdf 签名

Getting pdf signatures with iText7

我有一个场景需要使用 iText7 库从 pdf 中获取签名信息。签名可能存在也可能不存在。当我为没有任何数字签名的 PDF 实例化一个新的 SignatureUtil 对象时,出现异常

"There is no associate PdfWriter for making indirects."

。如果有签名,它就可以正常工作。我不确定如何更正此异常。

已更新以包含代码示例

Using reader As New PdfReader(pdfPath),
            pdf As New PdfDocument(reader)

                Dim util As New SignatureUtil(pdf)

                Dim signModel As String = "[Signature: {0} - {1}]"

                For Each signame As String In util.GetSignatureNames()
                    Dim whoisthis As PdfSignature = util.GetSignature(signame)
                    returnVal &= String.Format(
                        signModel,
                        whoisthis.GetName(),
                        whoisthis.GetReason
                        )
                Next

        End Using

异常抛出是因为文档中没有AcroForm,SignatureUtil尝试添加,但是没有关联PdfWriter.

作为解决方法,您可以检查文档是否包含 AcroForm:

PdfAcroForm.getAcroForm(document, false) != null

只有在 AcroForm 时才创建 SignatureUtil。如果没有 AcroForm,将没有签名字段。