2014-10-27 71 views
1

我有一個由GMC Printnet Designer 7.0生成的pdf。我有一個xml文件與xfa模板。我想合併它們並以pdf格式嵌入數據。 (我不想附加xml!)我無法使用itext設置xfa數據

我可以讀取xml數據,我可以讀取輸入的pdf,我可以啓動一個內存流並使用它產生輸出數據。但是當我檢查我用itext生成的pdf時,我看不到xfa形式。

這裏是我的C#代碼和XML文件:

PdfReader reader = new PdfReader("in.pdf"); 
    MemoryStream ms = new MemoryStream(); 
    PdfStamper stamper = new PdfStamper(reader, ms); 
    XfaForm xfa = new XfaForm(reader); 
    XmlDocument doc = new XmlDocument(); 
    doc.Load("in.xml"); 
    xfa.DomDocument = doc; 
    xfa.Changed = true; 
    XfaForm.SetXfa(xfa, stamper.Reader, stamper.Writer); 
    xfa.XfaPresent = true; 
    stamper.Close(); 
    File.WriteAllBytes("out.pdf", ms.ToArray()); 

XML文件

<?xml version="1.0" encoding="UTF-8"?><xfa:data xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"> 
<Invoice> 
<InvoiceNr>1010101010101010</InvoiceNr> 
<DateIssuance>2014-07-22</DateIssuance> 
<PaymentDueDate>2014-09-09</PaymentDueDate> 
<AmountToBePaid>53,25</AmountToBePaid> 
</Invoice> 
</xfa:data> 
+0

ps:有人實際上有同樣的問題。但我需要更多的信息,我不能評論這個問題,因爲聲譽。我添加了我的問題,但它已被刪除,並且一些聰明的(!)傢伙建議我對該問題「添加註釋」 – 2014-10-27 08:07:15

+0

您的XML文件看起來不正確。刪除第一行和最後一行,以便XML以開頭並以結尾。 – 2014-10-27 09:31:56

+0

我試過了,但沒有任何改變。 – 2014-10-27 11:36:53

回答

2

正如我在評論解釋,我不明白你的代碼(我也不知道你在哪裏已經找到了)。官方文檔說,你應該填補這樣的形式:

using (PdfStamper stamper = new PdfStamper(reader, ms)) { 
    AcroFields form = stamper.AcroFields; 
    XfaForm xfa = form.Xfa; 
    xfa.FillXfaForm(XmlReader.Create(new StringReader(xml))); 
} 

XfaMovies例子。對於C#版本,請參見http://tinyurl.com/itextsharpIIA2C08

更新:

在評論

,您添加鏈接到PDF和XML文件。這兩個文件都有問題:

  1. PDF文件不是表格。最多可以將它用作XFAF表單中的背景PDF。這隻能手動完成,並需要Adobe LiveCycle Designer等設計師。
  2. XML文件不是XFA流!正如我的書(OP定義爲「不幫助」)中記錄的那樣,XFA流由不同部分組成,例如config部分,localeSet部分,xmp部分,但更重要的是由template部分和datasets部分組成datadatadescription部分。共享的XML僅包含data部分,沒有datadescription,並且沒有template。因此,這種XML可以將永不集成到帶有XFA格式的PDF文件中,結果是:缺少太多的信息。

現在我已經看到了你在問題中討論的文件,很明顯你在問一些不可能的事情。您需要將XML的xsd導入到Adobe LiveCycle Designer等工具中,然後手動定義模板中字段的位置(XML中缺少該信息)並將PDF定義爲背景爲你的形式。

鑑於您共享的文件,無法自動執行此過程。

+0

謝謝布魯諾,但得到「對象引用未設置爲對象的實例。」錯誤。我認爲這意味着「我沒有原始pdf格式的表單」。是不是可以在沒有表單數據的pdf文件中創建靜態xfa格式? – 2014-10-27 13:34:21

+0

我假設你有一個動態的XFA表單。如果你有一個靜態的XFA表單,你需要使用我書中第8章描述的其他方法。無論如何:只要你不告訴我們任何有關你的表格的性質,你的問題就不清楚了。也許你應該分享這種形式。 – 2014-10-27 13:56:21

+0

實際上沒有任何形式。我必須在xfa格式中將一些xml數據嵌入到pdf中。它也不應該是可見的。我使用的XML文件在上面。 – 2014-10-27 16:28:22