2014-11-21 114 views
2

我假設我需要平鋪一個XFA表單,以便在使用Nuance的CSDK的應用程序的用戶界面上正確顯示。當我現在處理它時,我會收到一條通用消息「Please Wait ....如果此消息最終沒有被替換..」。如何使用iTextSharp將XFA PDF表單扁平化?

尋找一些示例iTextSharp代碼來做到這一點。

回答

5

您沒有插入代碼示例以顯示您當前如何展開XFA表單。我想你的代碼如下所示:試圖拉平基於AcroForm技術,表單時

var reader = new PdfReader(existingFileStream); 
var stamper = new PdfStamper(reader, newFileStream); 
var form = stamper.AcroFields; 
var fieldKeys = form.Fields.Keys; 
foreach (string fieldKey in fieldKeys) { 
    form.SetField(fieldKey, "X"); 
} 
stamper.FormFlattening = true; 
stamper.Close(); 
reader.Close(); 

此代碼將工作,但它不能用於基於XML表單架構(XFA)形式!

一個動態的XFA表單通常由一個頁面PDF(帶有「Please wait ...」消息的頁面)組成,它在查看器中顯示的不理解XFA。文檔的實際內容存儲爲XML文件。

將XFA表單壓扁爲普通PDF的過程需要您解析XML並將XML語法轉換爲PDF語法。這可以利用iText的XFA工人來完成:http://itextpdf.com/product/xfa_worker

假設你已經在內存(ms)的文件,它由所填寫的XFA表單,那麼你可以使用下面的代碼來拉平這種形式:

Document document = new Document(); 
PdfWriter writer = 
    PdfWriter.GetInstance(document, new FileStream(dest, FileMode.Create)); 
XFAFlattener xfaf = new XFAFlattener(document, writer); 
ms.Position = 0; 
xfaf.Flatten(new PdfReader(ms)); 
document.Close(); 

可以下載包含了XFA工人的DLL文件,以及在這裏舉例一個zip文件:http://itextsupport.com/download/xfa-net.zip

不過:因爲太多的開發者使用iTextSharp的在商業方面的AGPL版本,而不必購買商業許可證,我們決定不開源XFA工人。您可以在試用期獲得許可證密鑰,但它是構建在iTextSharp商業版本之上的商業產品。如果您從iText Software購買許可證,XFA Worker只能用於生產。對於iTextSharp也是如此,但對於iTextSharp,如果不購買商業許可證,則沒有許可證密鑰可阻止使用。對於iTextSharp,我們依靠誠實。對於XFA Worker,我們採取了一些預防措施;-)

+0

感謝您的回覆,我沒有提供任何代碼,因爲我沒有任何代碼,也不知道從哪裏開始。所以,你說AGPL版本沒有辦法平展XFA PDF? – Chuck 2014-11-21 19:17:41

+4

除了Adobe LiveCycle(成千上萬美元)和iText的XFA工作者之外,您可能找不到任何其他可以使動態XFA變平的軟件。原因很簡單:XFA規範對於「愛好者」來說太複雜了。你不會找到任何人願意免費爲XFA平板機的開發工作。 – 2014-11-21 20:26:19

+0

好的,知道了,答案是否。 – Chuck 2014-11-21 20:40:37