如何创建和填写 PDF 表单
How to create and fill out a PDF form
问题背景:我有时会在 paper/word document.pdf 文档模板中得到包含控件(文本框、复选框)的不同类型的模板。
现在我必须在提供的模板中分配值,并将其保存为 pdf 文档。
所以我发现了一些对模板化有用的东西,叫做 Openoffice,我可以从那里添加控件并保存为 pdf 模板文档。
现在该模板需要赋值,为此找到一个名为 iTextSharp 的 dll。
根据我尝试添加时的示例,pdf 模板中的字段数显示为 0。有人可以帮我为 PDF 模板分配值吗?
下面是我在这种情况下使用的代码。
private void ListFieldNames()
{
string pdfTemplate = @"D:.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();
}
使用 OpenOffice 创建交互式 PDF 表单并使用 iText(或 iTextSharp)填写它是一项 no-brainer。请阅读我的书的 Chapter 6,更具体地说是第 6.3.5 节 "Filling out a PDF form." 本节的第一部分标题为 "Creating a form with OpenOffice."
创建 真实字段 并为这些字段命名非常重要。然后您必须确保将文档导出为 PDF 格式:
如您所见,您需要选中创建 PDF 旁边的复选框。
我有理由相信你没有这样做,因为你说:
based on the samples while i am trying to add , the count of the fields in the pdf template is showing as 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();
在此代码段中,key1
、key2
、key3
、...是您在 OpenOffice 中创建表单时为字段定义的值,value1
, value2
, value3
,... 是您要添加到字段的值。
问题背景:我有时会在 paper/word document.pdf 文档模板中得到包含控件(文本框、复选框)的不同类型的模板。
现在我必须在提供的模板中分配值,并将其保存为 pdf 文档。
所以我发现了一些对模板化有用的东西,叫做 Openoffice,我可以从那里添加控件并保存为 pdf 模板文档。
现在该模板需要赋值,为此找到一个名为 iTextSharp 的 dll。
根据我尝试添加时的示例,pdf 模板中的字段数显示为 0。有人可以帮我为 PDF 模板分配值吗? 下面是我在这种情况下使用的代码。
private void ListFieldNames()
{
string pdfTemplate = @"D:.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();
}
使用 OpenOffice 创建交互式 PDF 表单并使用 iText(或 iTextSharp)填写它是一项 no-brainer。请阅读我的书的 Chapter 6,更具体地说是第 6.3.5 节 "Filling out a PDF form." 本节的第一部分标题为 "Creating a form with OpenOffice."
创建 真实字段 并为这些字段命名非常重要。然后您必须确保将文档导出为 PDF 格式:
如您所见,您需要选中创建 PDF 旁边的复选框。
我有理由相信你没有这样做,因为你说:
based on the samples while i am trying to add , the count of the fields in the pdf template is showing as 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();
在此代码段中,key1
、key2
、key3
、...是您在 OpenOffice 中创建表单时为字段定义的值,value1
, value2
, value3
,... 是您要添加到字段的值。