Как сгладить PDF с Itext в C#?

Мне нужно удалить все поля формы PDF, поэтому я использую iText и пытаюсь сгладить PDF.

Из-за устаревшего кода я ограничен до версии iText 4.1.6.1

Мой код:

    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 не сплющен

1 ответ

Решение

На всякий случай, если у кого-то есть похожая проблема. Я мог бы решить эту проблему, изменив InputStream для 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();
        }              
    }
Другие вопросы по тегам