我有一个带动态字段的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” - 我需要一种方法来填充行。
我很抱歉这种困惑并感谢你的帮助。
答案 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。