如何在c#中使用文本平整化pdf

本文关键字:文本 pdf | 更新日期: 2023-09-27 17:54:28

我需要删除pdf的所有表单字段,所以我使用iText并尝试扁平化pdf。

由于遗留代码,我被限制为ittext版本4.1.6.1

My Code is:

    public static byte[] RemoveAcroFields(String filename)
    {
        if (filename != null && File.Exists(filename))
        {
            byte[] pdfFile = File.ReadAllBytes(filename);
            PdfReader reader = new PdfReader(pdfFile);
            MemoryStream stream = new MemoryStream(pdfFile);
            PdfStamper stamper = new PdfStamper(reader, stream);
            stamper.FormFlattening = true;
            stamper.Close();
            var flattenedPdfBytes = stream.ToArray();
            reader.Close();
            stream.Close();
            return flattenedPdfBytes;                
        }
        else
        {
            return null;
        }            
    }

这会产生这个异常

bei System.IO.MemoryStream.set_Capacity(Int32 value)
 bei System.IO.MemoryStream.set_Capacity(Int32 value)
  bei System.IO.MemoryStream.EnsureCapacity(Int32 value)
  bei System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)

当我取消stamper.close()方法的注释时,没有异常发生,但是生成的pdf没有被平展

如何在c#中使用文本平整化pdf

以防有人有类似的问题。我可以通过将PdfStamper的输入流从MemoryStream更改为FileStream来解决这个问题。有了这个改变,它对我有效。

public static void RemoveAcroFields(String filename)
    {
        if (filename != null && File.Exists(filename))
        {                
            byte[] pdfFile = File.ReadAllBytes(filename);
            PdfReader reader = new PdfReader(pdfFile);
            PdfStamper stamper = new PdfStamper(reader, new FileStream(filename, FileMode.Create));
            stamper.FormFlattening = true;
            stamper.Close();                                             
            reader.Close();
        }              
    }