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