使用 iTextSharp 填写 PDF 表单 - 添加图像,并保持可编辑

Fill PDF Form with iTextSharp - add image, and keep editable

我正在尝试使用 iTextSharp 来操作可填写的 pdf 表单模板。 IRS 的可填写 W4 是源表单的一个很好的例子(不过,我将在实际解决方案中编写自己的表单):http://www.irs.gov/pub/irs-pdf/fw4.pdf

我需要:

  1. 填写一些表单输入,但不是全部
  2. 向 pdf 添加一些自定义元数据
  3. 向 pdf 添加条形码图像
  4. 让生成的表格仍然可以在 Acrobat 中填写 Reader

我已经克服了一个看似常见的问题,即必须创建 PdfStamper 才能附加到 pdf - 这在填写表单输入和添加元数据时效果很好。但是,如果我将图像添加到 PDF,则会导致非常令人失望的消息

This document enabled extended features in Adobe Reader. The document has been changed since it was created and use of extended features is no longer available. etc...

因此,无法再在 Acrobat 中编辑表单 Reader。

这是代码的高级示例:

PdfReader reader = new PdfReader(templateFile);                                  
using (PdfStamper stamper = new PdfStamper(reader, new FileStream(outputFile, FileMode.Create), '[=10=]', true))
{
    // fill in some fields
    AcroFields form = stamper.AcroFields;
    form.SetField("Field1", "My Value");
    form.SetField("Field2", "Another Value");

    // add some metadata
    Dictionary<String, String> info = reader.Info;                
    info.Add("SourceID", "1234567890");
    stamper.MoreInfo = info;

    // add a barcode image
    PdfContentByte cb = stamper.GetOverContent(1);
    Barcode39 code39ext = new Barcode39();
    code39ext.Code = "1234567890";
    code39ext.StartStopText = false;
    code39ext.Extended = true;
    iTextSharp.text.Image barcode = code39ext.CreateImageWithBarcode(cb, null, null);
    barcode.ScalePercent(100);
    barcode.SetAbsolutePosition(50, 500);
    cb.AddImage(barcode)

    stamper.Close();
}

主要问题:如前所述,字段完成和元数据部分工作正常。但是,添加条形码图像会破坏 pdf 的 "extended features"。有没有一种方法可以添加不破坏 "extended features" 的条形码图像?

给别人一个答案,@mkl是对的。通过修改pdf的"content",签名被破坏。但是,只要未启用 "extended reader features",就可以填写表格、添加元数据并将条形码添加到可填写的 PDF 中。由于我们正在编写自己的表单,因此这对我们来说是一个有效的解决方案。