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

我试图使用iTextSharp来操作可填写的pdf表单模板 . IRS的可填写W4就是一个很好的源代码示例(不过,我将在真正的解决方案中创作自己的表单):http://www.irs.gov/pub/irs-pdf/fw4.pdf

我需要:

  • 填写一些表格输入,但不是全部

  • 向pdf添加一些自定义元数据

  • 将条形码图像添加到pdf中

  • 生成的表单仍可在Acrobat Reader中填写

我已经克服了PdfStamper必须创建的附加到pdf的常见问题 - 这在填写表单输入和添加元数据时工作正常 . 但是,如果我向PDF添加图像,则会导致非常令人失望的消息

此文档在Adobe Reader中启用了扩展功能 . 该文档自创建以来已更改,并且不再使用扩展功能 . 等等...

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

以下是代码的高级示例:

PdfReader reader = new PdfReader(templateFile);                                  
using (PdfStamper stamper = new PdfStamper(reader, new FileStream(outputFile, FileMode.Create), '\0', 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的“扩展功能” . 有没有办法可以添加不会破坏“扩展功能”的条形码图像?

回答(1)

2 years ago

为了给别人提供答案,@ mkl是正确的 . 通过修改pdf的“内容”,签名被破坏 . 但是,只要未启用“扩展阅读器功能”,就可以填写表单,添加元数据并将条形码添加到可填写的PDF中 . 由于我们正在编写自己的表单,因此这对我们来说是一个有效的解决方案 .