首页 > 解决方案 > 如何在使用 iTextsharp 签署 pdf 时优化时间

问题描述

我在 C# 项目中使用 iTextsharp 5.5.13.0 使用智能卡 (X509Certificate2) 对 pdf 文件进行签名。加盖签名的过程很好,但签名所需的时间比此过程的早期版本(iTextsharp 4.1.2.0)要多得多。

以前,从选择证书到完成签名过程不超过 10 秒,现在需要两倍多。

这是签署 pdf 的代码。我还附上了签名所需时间的图片。我可以做些什么来减少签名时间?

public static void SignHashed(string Source, string Target, X509Certificate2 Certificate, string Reason, string Location, bool AddTimeStamp, string strTSA)
    {
        X509CertificateParser objCP = new X509CertificateParser();
        X509Certificate[] objChain = new X509Certificate[] { objCP.ReadCertificate(Certificate.RawData) };

        IList<ICrlClient> crlList = new List<ICrlClient>();
        crlList.Add(new CrlClientOnline(objChain));

        PdfReader objReader = new PdfReader(Source);
        PdfStamper objStamper = PdfStamper.CreateSignature(objReader, new FileStream(Target, FileMode.Create), '\0', null, true);

        int pageNumber = objReader.NumberOfPages;

        ITSAClient tsaClient = null;
        IOcspClient ocspClient = null;
        if (AddTimeStamp)
        {
            OcspVerifier ocspVerifier = new OcspVerifier(null, null);
            ocspClient = new OcspClientBouncyCastle(ocspVerifier);
            tsaClient = new TSAClientBouncyCastle(strTSA);
        }

        PdfSignatureAppearance signatureAppearance = objStamper.SignatureAppearance;
        signatureAppearance.Reason = Reason;
        signatureAppearance.Location = Location;
        signatureAppearance.Acro6Layers = true;
        signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION;
        signatureAppearance.SetVisibleSignature(new Rectangle(50, 10, 200, 66), pageNumber, null);

        IExternalSignature externalSignature = new X509Certificate2Signature(Certificate, "SHA-1");

        // this process take to much time
        MakeSignature.SignDetached(signatureAppearance, externalSignature, objChain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CMS);

        if (objReader != null)
        {
            objReader.Close();
        }
        if (objStamper != null)
        {
            objStamper.Close();
        }
    }

时间 MakeSignature 过程

标签: c#itext

解决方案


推荐阅读