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

时间:2015-01-14 18:07:58

标签: c# pdf itextsharp

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

我需要:

  1. 填写一些表单输入,但不是全部
  2. 将一些自定义元数据添加到pdf
  3. 将条形码图像添加到pdf
  4. 生成的表单仍可在Acrobat Reader中填写
  5. 我已经克服了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 个答案:

答案 0 :(得分:0)

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