[英]iTextSharp - Populating a dynamic table field
我有一個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”-我將需要一種填充行的方法。
很抱歉造成您的困惑,感謝您的幫助。
特別感謝@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語句中。)
您正在混合兩種不同的技術。
您所引用的文章填寫了靜態表格。 即:要么PDF要么只包含AcroForm字段,要么包含由基於AcroForm技術 以及基於XML Forms Architecture (XFA)的表單定義組成的混合表單。
您正在談論動態表單,這意味着您正在談論純XFA。 您需要一個完全不同的示例: Java / C#
使用fillXfaForm()
方法填寫表單后,您可以使用封閉源XFA Worker展平表單。 另請參見下載頁面 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.