如何在 C# 中使用 Itext 展平 pdf?
How to flatten pdf with Itext in 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 没有被展平
以防万一有人遇到类似问题。我可以通过将 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();
}
}
我需要删除 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 没有被展平
以防万一有人遇到类似问题。我可以通过将 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();
}
}