C# 中的 AcroForm PDF 到普通 PDF

Posted

技术标签:

【中文标题】C# 中的 AcroForm PDF 到普通 PDF【英文标题】:AcroForm PDF to normal PDF in c# 【发布时间】:2015-07-08 12:41:45 【问题描述】:

我有一个 Acroform PDF(可以编辑的 PDF),但我使用 API 签署 PDF,这要求 PDF 是普通的,而不是 Acroform 的。

有什么方法可以将 AcroForm PDF 转换为普通 PDF?

我尝试将其设为只读,但即使无法编辑它仍然是 Acroform PDF。

【问题讨论】:

我相信你必须把表格弄平,让我仔细检查一下。 带有 AcroForm 表单域的 PDF 一个普通的。您所称的 Acroform PDF 很可能是具有已启用Reader 的 AcroForm 字段的 PDF,即包含使用权限签名。使用权签名也是普通的 PDF,但一些简单的签名 API 可能对以前签名的 PDF 有问题。 【参考方案1】:

在回答我的评论时,我假设您使用的是 iTextSharp,即使您没有指定。使用 iTextSharp,我相信您需要在完成后将表单展平。这是一个简单的例子:

public void GeneratePDF(string filePath, List<PDFField> modifiedFields)
        
            var pdfReader = new PdfReader(filePath);
            var folderStructure = filePath.Split('\\');
            if (folderStructure.Length == 0) return;
            var currentFileName = folderStructure.Last();
            var newFilePath = string.Format("01", Constants.SaveFormsPath,
                currentFileName.Replace(".pdf", DateTime.Now.ToString("MMddyyhhmmss") + ".pdf"));
            var pdfStamper = new PdfStamper(pdfReader, new FileStream(newFilePath, FileMode.Create));
            foreach (var field in modifiedFields.Where(f=>f.Value != null))
            
                pdfStamper.AcroFields.SetField(field.Name, field.Value);
            
            pdfStamper.FormFlattening = true;
            pdfStamper.Close();
        

忽略有关文件名的部分,归结为传递一些有关要设置的字段值的键值列表。这可能是您做签名的地方,然后将压模上的 FormFlatning 属性设置为 true。

这是另一个 SO 帖子,他们使用了类似的技术来解决稍微不同的问题,这可能会有所帮助:How to flatten already filled out PDF form using iTextSharp

【讨论】:

我实际上正在使用 iTextSharp,是的。我马上去检查一下。谢谢。

以上是关于C# 中的 AcroForm PDF 到普通 PDF的主要内容,如果未能解决你的问题,请参考以下文章

使用Java和IText,如何从PDF中提取AcroForm字段名称?

使用DevExpress Reports和PDF Viewer创建AcroForm Designer

使用 iText 填写静态 XFA PDF

iText7 & C# 从存储在 MSSQL DB 中的 PDF 中提取页面

C# 把XML转换成PDF文件

C#中的CSV到PDF文件