Как сгладить 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();
}
}