如何在c#中使用Itext展平pdf? [英] How to flatten pdf with Itext in c#?

查看:91
本文介绍了如何在c#中使用Itext展平pdf?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要删除pdf的所有表单字段,因此我使用iText并尝试压缩pdf。

I need to remove all form fields of a pdf, so I am using iText and try to flatten the pdf.

由于遗留代码,我被限制在iText版本4.1.6.1

Because of legacy code I am restricted to iText version 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尚未展平

When I uncomment the stamper.close() method no Exception occurs but the resulting pdf has not been flattened

推荐答案

以防万一有类似问题。我可以通过将PdfStamper的InputStream从MemoryStream更改为FileStream来解决它。有了这个改变,它对我有用。

Just in case someone has a similiar problem. I could solve it by changing the InputStream for the PdfStamper from MemoryStream to FileStream. With this change it worked for me.

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();
        }              
    }

这篇关于如何在c#中使用Itext展平pdf?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆