iText7中PdfStamper与AcroFields的替代方案及用法咨询
iText7中PdfStamper与AcroFields的替代方案及代码迁移
核心替代对应关系
- PdfStamper替代方案:iText7移除了
PdfStamper类,改用PdfDocument结合PdfReader和PdfWriter实现PDF编辑功能,通过配置PdfWriter参数控制编辑模式。 - AcroFields替代方案:对应iText7中的
PdfAcroForm类,专门用于处理PDF中的交互式表单域。
迁移后的iText7实现代码
using iText.Kernel.Pdf; using iText.Forms; using System.IO; using System.Collections.Generic; public byte[] GeneratePDF(string pdfPath, Dictionary<string, string> formFieldMap, bool formFlattening = true) { using var output = new MemoryStream(); using var reader = new PdfReader(pdfPath); using var writer = new PdfWriter(output); using var pdfDocument = new PdfDocument(reader, writer); // 获取PDF表单对象 var form = PdfAcroForm.GetAcroForm(pdfDocument, true); // 遍历设置表单字段值 foreach (var fieldEntry in formFieldMap) { var field = form.GetField(fieldEntry.Key); if (field != null) { field.SetValue(fieldEntry.Value); } } // 表单扁平化处理 if (formFlattening) { form.FlattenFields(); } // PdfDocument关闭时会自动释放reader和writer资源 return output.ToArray(); }
关键代码说明
- 资源管理:使用
using语句自动管理PdfReader、PdfWriter和PdfDocument的生命周期,无需手动调用Close()。 - 表单获取:
PdfAcroForm.GetAcroForm的第二个参数设为true,确保能获取到现有表单(若表单不存在则创建,此处适配编辑已有表单的场景)。 - 字段赋值:通过
form.GetField定位目标字段后,调用SetValue方法设置内容,替代iTextSharp中的SetField方法。 - 表单扁平化:调用
form.FlattenFields()完成扁平化处理,替代原stamper.FormFlattening = true的设置逻辑。
内容的提问来源于stack exchange,提问作者vikas chaudhary
相关产品推荐
相关产品推荐

