如何在c#中使用Itext展平pdf?

我需要删除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; } } 

这会产生此exception

 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()方法时,不会发生exception,但生成的pdf尚未展平

以防有人有类似的问题。 我可以通过将PdfStamper的InputStream从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(); } }