1

我有一个 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”——我需要一种填充行的方法。

我很抱歉造成混乱并感谢您的帮助。

4

2 回答 2

4

特别感谢@Bruno Lowagie 为我指明了正确的方向。

现在我将重现解决方案。

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

这最终是我提供的 XML 文件,PdfStamper以填充 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 语句中。)

于 2013-05-31T23:14:08.063 回答
1

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

您所指的文章填写了一个静态表格。即:要么是只包含 AcroForm 字段的 PDF,要么是由基于 AcroForm 技术和 XML 表单架构 (XFA) 的表单定义组成 混合表单

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

使用该方法填写表格后fillXfaForm(),您可以使用闭源XFA Worker将表格展平。另请参阅下载页面

于 2013-05-23T08:22:26.923 回答