如何创建和填写 PDF 表单

Posted

技术标签:

【中文标题】如何创建和填写 PDF 表单【英文标题】:How to create and fill out a PDF form 【发布时间】:2015-11-08 17:46:21 【问题描述】:

问题的背景:我可能会在纸质/word document.pdf 文档模板中获得包含控件(文本框、复选框)的不同类型的模板。

现在我必须在提供的模板中分配值,并将其保存为 pdf 文档。

所以我发现了一些对模板有用的东西叫做 Openoffice,我可以从那里添加控件并能够保存为 pdf 模板文档。

现在该模板需要分配值,因为找到了一个名为 iTextSharp 的 dll。

根据我尝试添加时的示例,pdf 模板中的字段计数显示为 0。任何人都可以帮我分配 PDF 模板的值吗? 下面是我在这个案例中使用的代码。

   private void ListFieldNames()
        
            string pdfTemplate = @"D:\17.pdf";
            loadPDF(pdfTemplate);


            // title the form
            //this.Text += " - " + pdfTemplate;

            // create a new PDF reader based on the PDF template document
            PdfReader pdfReader = new PdfReader(pdfTemplate);

            // create and populate a string builder with each of the
            // field names available in the subject PDF
            StringBuilder sb = new StringBuilder();
            foreach (DictionaryEntry de in pdfReader.AcroFields.Fields)
            
                sb.Append(de.Key.ToString() + Environment.NewLine);
            

            // Write the string builder's content to the form's textbox
          //  userName.Text = sb.ToString();

         

【问题讨论】:

【参考方案1】:

使用 OpenOffice 创建交互式 PDF 表单并使用 iText(或 iTextSharp)填写是一件轻而易举的事。请阅读我的书Chapter 6,更具体地说,第 6.3.5 节“填写 PDF 表格”。本节的第一部分标题为“使用 OpenOffice 创建表单”。

创建真实字段并为这些字段命名很重要。然后,您必须确保将文档导出为 PDF 表单:

如您所见,您需要选中创建 PDF 旁边的复选框。

我有理由相信你没有这样做,因为你说:

根据我尝试添加时的示例,pdf 模板中的字段计数显示为 0。

如果您希望我们检查该 PDF 模板中的字段计数是否为 0,或者您是否做错了什么,您应该分享您的 PDF。

如果你做事正确(即:如我书中所述),你可以像这样填写表格:

PdfReader reader = new PdfReader(template);
PdfStamper stamper = new PdfStamper(reader,
    new FileStream(newFile, FileMode.Create));
AcroFields form = stamper.AcroFields;         
form.SetField(key1, value1);      
form.SetField(key2, value2);      
form.SetField(key3, value3);
...
stamper.Close();

在这个 sn-p 中,key1key2key3、...是您在 OpenOffice 中创建表单时为字段定义的值,value1value2、@987654332 @,... 是您要添加到字段中的值。

【讨论】:

我能够做到这一点,但是在 Open office 中创建 pdf 模板时,我可以管理控件长度,但是在使用 iTextsharp 控件填充控件中的数据时,控件的大小非常大,你能请纠正我实现此功能的正确方法是什么? 定义尺寸很大。您是在谈论 file sizefont size(您在模板中定义它;iText 只是服从)、field size(再次:您定义这)。如果您以太大的方式定义字体或字段,则不应抱怨它们太大。如果字体或字段不是您的意思,请在新问题中说明。请勿使用此评论部分发布其他问题。 :好的,感谢您对上述问题的宝贵指导 @BrunoLowagie,您的信息非常好,答案很明确,但您的语气显得有些粗鲁。例如no-brainer 似乎相当极端,因为回答这个问题需要相当多的解释。我从其他问题中看到您有荷兰血统,所以我只想说大多数其他文化中的人并不那么直接。在 SO 上,最好采用更国际化的语气。

以上是关于如何创建和填写 PDF 表单的主要内容,如果未能解决你的问题,请参考以下文章

如何创建基于 Web 的 PDF 提交表单?

带有可填写表单域的 PDF +“另存为”=带有固定文本的 PDF - 如何?

如何使用Python填写PDF表单

Java 创建填充PDF表单域

Java 创建填充PDF表单域

Java创建填充pdf表单域