PDF/A 一致性问题

PDF/A Conformance issue

所以我已经设置了 ItextSharp,并且我已经让签名过程在一定程度上工作,嵌入图像和字体正在工作但是我在签署文档时收到以下验证错误(未认证), "A string is longer than 65535 bytes." 这导致我的文档不符合 PDF/A-1a 标准。我检查了代码,问题似乎出在 ITextSharp(5.5.6) 的 MakeSignature.SignDetached 方法中,是否有任何特定原因会导致这种情况发生?

签名文档有错误:https://drive.google.com/file/d/0B9RyqgJoa6W8Q1ZySkhjUS1iTmM/view?usp=sharing

private void SignDocumentSigningBlock(Certificate certificate, SigningInformation information, SigningBlock block, PdfSignatureAppearance appearance, PdfStamper stamper, byte[] signatureImage)
{
    X509Certificate2 x509Certificate = new X509Certificate2(certificate.Bytes, certificate.Password, X509KeyStorageFlags.Exportable);

    appearance.SetVisibleSignature(block.Name);
    SignDocumentSigningBlockWithImage(signatureImage, appearance);
    SignDocumentSigningBlockWithText(appearance, x509Certificate);

    using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)x509Certificate.PrivateKey)
    {
        IExternalSignature externalSignature = new PrivateKeySignature(DotNetUtilities.GetRsaKeyPair(rsa).Private, _settingManager["DocumentSigningEncryptionHashAlgorithm"]);
        MakeSignature.SignDetached(appearance, externalSignature, SignDocumentSigningBlockBuildChain(x509Certificate), null, null, new TSAClientBouncyCastle(_settingManager["DocumentSigningTimestampingServiceAddress"]), Int32.Parse(_settingManager["DocumentSigningEstimatedTimestampSize"]), CryptoStandard.CMS);
    }
}

如有任何建议或帮助,我们将不胜感激。 亲切的问候

更新

我已经签署了将估计大小减少到 20400 的文档,但是在进行合规性检查时我仍然收到相同的警告。 Link 到新文档: https://drive.google.com/file/d/0B9RyqgJoa6W8UkpGODhLWHl5bTQ/view?usp=sharing

您的 MakeSignature.SignDetached 电话

MakeSignature.SignDetached(appearance, externalSignature, SignDocumentSigningBlockBuildChain(x509Certificate), null, null, new TSAClientBouncyCastle(_settingManager["DocumentSigningTimestampingServiceAddress"]), Int32.Parse(_settingManager["DocumentSigningEstimatedTimestampSize"]), CryptoStandard.CMS);

明确要求 iTextSharp 为

保留space
Int32.Parse(_settingManager["DocumentSigningEstimatedTimestampSize"])

许多字节来嵌入签名。

因此,请降低 _settingManager["DocumentSigningEstimatedTimestampSize"] 值。

0 的值要求 iTextSharp 进行粗略估计。这样的估计可能会超出某些限制,因此不应在您的情况下使用。

顺便说一下,DocumentSigningEstimatedTimestampSize 这个名字在这里有误导性。

PS:如果您在签名中嵌入额外的 material,例如 CRL、OCSP 响应或时间戳,签名大小会增加。为了 PDF/A-1a 一致性,请尽可能少地将此类附加信息放入签名中。