iTextSharp PdfSignatureAppearance.Close()抛出内存不足异常

时间:2014-03-12 12:13:58

标签: c# pdf-generation itextsharp itext digital-signature

我有一个对PDF文件进行数字签名的应用程序。

但我无法在开发人员计算机上对超过400mb的文件进行数字签名。

我使用以下代码进行签名。调用Close的方法PdfSignatureAppearance时,此代码会抛出OutOfMemoryException。

使用较小的文件,它可以正常工作。

当我需要签署大文件时,我该怎么做才能避免内存不足?

这是我的代码:

    private static void ApplySignatureDictionary(PdfSignatureAppearance sap, byte[] pk)
    {
        try
        {
            byte[] outc = new byte[8092];

            PdfDictionary dicSignature = new PdfDictionary();

            Array.Copy(pk, 0, outc, 0, pk.Length);

            dicSignature.Put(PdfName.CONTENTS, new PdfString(outc).SetHexWriting(true));
            sap.Close(dicSignature); //This throws a OutOfMemoryException, for files bigger than 400mb
        }
        catch (OutOfMemoryException omEx)
        {
            throw new Exception("Not enough memory to sign the file.", omEx);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

其中pkOrg.BouncyCastle.Cms.CmsSignedData.GetEncoded()

的结果

编辑:

我以这种方式实例化PdfReader和PdfStamper:

PdfReader:

 PdfReader reader = new PdfReader(new iTextSharp.text.pdf.RandomAccessFileOrArray(inputPDF), null);

PdfStamper:

MemoryStream mFile = new MemoryStream();

PdfStamper stamper = PdfStamper.CreateSignature(reader, mFile, '\0');

0 个答案:

没有答案