我假設我需要平鋪一個XFA表單,以便在使用Nuance的CSDK的應用程序的用戶界面上正確顯示。當我現在處理它時,我會收到一條通用消息「Please Wait ....如果此消息最終沒有被替換..」。如何使用iTextSharp將XFA PDF表單扁平化?
尋找一些示例iTextSharp代碼來做到這一點。
我假設我需要平鋪一個XFA表單,以便在使用Nuance的CSDK的應用程序的用戶界面上正確顯示。當我現在處理它時,我會收到一條通用消息「Please Wait ....如果此消息最終沒有被替換..」。如何使用iTextSharp將XFA PDF表單扁平化?
尋找一些示例iTextSharp代碼來做到這一點。
您沒有插入代碼示例以顯示您當前如何展開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,我們採取了一些預防措施;-)
感謝您的回覆,我沒有提供任何代碼,因爲我沒有任何代碼,也不知道從哪裏開始。所以,你說AGPL版本沒有辦法平展XFA PDF? – Chuck 2014-11-21 19:17:41
除了Adobe LiveCycle(成千上萬美元)和iText的XFA工作者之外,您可能找不到任何其他可以使動態XFA變平的軟件。原因很簡單:XFA規範對於「愛好者」來說太複雜了。你不會找到任何人願意免費爲XFA平板機的開發工作。 – 2014-11-21 20:26:19
好的,知道了,答案是否。 – Chuck 2014-11-21 20:40:37