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