iTextSharp - 填充动态表字段

时间:2013-05-23 01:11:56

标签: c# itextsharp

我有一个带动态字段的XDP和动态PDF文件。

我可以填写文本字段等(如下面的代码所示)。

问题是我有一个动态表字段,我不知道如何填充它。我找到了许多很好的教程来“从头开始”创建一个表,但这里的表是一个已预定义的字段(宽度,列数等)

我如何填充动态表格字段?任何帮助将不胜感激。

PS - 以下是我用来填充文本字段等的代码,基于这篇文章:http://bit.ly/12Xu1QY

string template = "template.pdf";
string new = "new.pdf";

var reader = new PdfReader(template);
var stamper = new PdfStamper(reader, new FileStream(file, FileMode.Create));

AcroFields fields = stamper.AcroFields;

fields.SetField("FIELD_NAME_1", "VALUE1");
fields.SetField("FIELD_NAME_2", "VALUE2");

stamper.Close();

修改

从@Bruno Lowagie的回答来看,恐怕我没有使用正确的措辞。我有一个LiveCycle Designer文件(XDP),我将其保存为动态PDF表单文件(PDF)。这来自SAP应用程序。上面的代码很适合我,所以我理解它实际上是一个静态的PDF表单。

然后,表字段被称为“FIELD” - 我需要一种方法来填充行。

我很抱歉这种困惑并感谢你的帮助。

2 个答案:

答案 0 :(得分:4)

特别感谢@Bruno Lowagie指出我正确的方向。

现在我将重现解决方案。

我开始使用带有XFA表单的XDP文件(Adobe LiveCycle文件)。然后我将其保存为PDF文件,并使用Acrobat Pro填写表单,最后将表单数据导出到XML文件。

这最终是我用PdfStamper提供的XML文件,以填充PDF文件。

首先,我以这种方式动态生成XML:

var doc = new XDocument(new XDeclaration("1.0", "UTF-8", ""),
new XElement("CUSTOMER",
new XElement("FIRST_NAME", FirstNameTextBox.Text),
new XElement("LAST_NAME", LastNameTextBox.Text)
));

然后我以这种方式将其提供给PdfStamper

var reader = new PdfReader(templateFilename);
var stamper = new PdfStamper(reader, new FileStream(bolFilename, FileMode.Create));
var xml = GenerateXml(); // Above code
var stream = new MemoryStream(UTF8Encoding.Default.GetBytes(xml ?? String.Empty));

stamper.AcroFields.Xfa.FillXfaForm(stream);
stamper.Close();

(不要忘记将代码放在using语句中。)

答案 1 :(得分:1)

你正在混合两种不同的技术。

您所指的文章会填写静态表单。即:要么只包含AcroForm字段的PDF,要么是包含基于 AcroForm技术 的表单定义的混合形式,以及基于 XML Forms Architecture (XFA)。

你在谈论动态表单,这意味着你在谈论纯XFA。您需要一个完全不同的示例:Java / C#

使用fillXfaForm()方法填写表单后,您可以使用已关闭的来源XFA Worker展平表单。另请参阅download page