我尝试使用itext7在pdf表单上进行邮件合并,但是当我在Adobe中打开表单时,字段没有填写。
在Chrome中打开相同的表单会显示填充的字段。
此外,表格上还有一个计算出的条形码,即使我不更新条形码表格字段,也会在Adobe中通过itext7后再次中断,但不会再次破坏Chrome。
如果有我想要设置的标志,或者如果这是itext7的已知问题,是否有人有任何想法?
我尝试合并的表单是US g-28 form (Google Drive link)。
出于某种原因,government website上的当前版本目前缺少条形码,但它的形式相同。
我试图确定它是否是itext7或我的代码的问题,所以我知道我是否应该评估一个不同的PDF库。
using iText.Forms;
using iText.Kernel.Pdf;
using System;
using System.Data;
using System.IO;
using System.Linq;
namespace PDF_Merge
{
public class pdf_merge_txt
{
static void Main(string[] args)
{
// args = new[] { "form.pdf", "data.txt" }
var filePath = Path.GetDirectoryName(args[0]);
var fileName = Path.GetFileNameWithoutExtension(args[0]);
var extension = Path.GetExtension(args[0]);
if (args.Length == 2)
{
using (FileStream stream = new FileStream(args[1], FileMode.Open, FileAccess.Read))
{
var outfile = Path.ChangeExtension(args[1], "pdf");
var pdfDoc = new PdfDocument(new PdfReader(args[0]).SetUnethicalReading(true), new PdfWriter(outfile));
var form = PdfAcroForm.GetAcroForm(pdfDoc, true);
form.SetGenerateAppearance(true);
var fields = form.GetFormFields();
foreach (var line in File.ReadAllLines(args[1]))
{
var parts = line.Trim().Split(new[] { ":=" }, StringSplitOptions.None);
var field = fields.Where(f => f.Key.EndsWith(parts[0])).OrderBy(f => f.Key.Length).Select(f => f.Value).FirstOrDefault();
if (field != null)
{
field.SetValue(parts[1].Trim());
}
}
pdfDoc.Close();
}
}
}
}
}
data.txt如下所示:
form1[0].#subform[0].Line6_EMail[0]:=email@address.com
form1[0].#subform[0].Line4_DaytimeTelephoneNumber[0]:=123456789
form1[0].#subform[0].Line7_MobileTelephoneNumber[0]:=0987654321
form1[0].#subform[0].Line2c_MiddleName[0]:=Anon
form1[0].#subform[0].Line2b_GivenName[0]:=John
form1[0].#subform[0].Line2a_FamilyName[0]:=Doe