iText7未在Adobe Acrobat中显示填充的表单字段,条形码

时间:2017-03-27 04:13:24

标签: c# itext itext7

我尝试使用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

0 个答案:

没有答案