¿Cómo puedo aplanar un formulario PDF XFA usando iTextSharp?
(1)
Supongo que necesito aplanar un formulario XFA para mostrarlo correctamente en la interfaz de usuario de una aplicación que utiliza el CSDK de Nuance. Cuando lo proceso ahora recibo un mensaje genérico "Espere ... si este mensaje no se reemplaza finalmente ...".
Buscando un ejemplo de código iTextSharp para hacer esto.
No insertó un ejemplo de código para mostrar cómo está actualmente acoplando el formulario XFA. Supongo que su código se ve así:
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();
¡Este código funcionará cuando intente aplanar formularios basados en la tecnología AcroForm, pero no puede usarse para formularios basados en la Arquitectura de formularios XML (XFA)!
Un formulario XFA dinámico generalmente consta de una sola página PDF (la que tiene el mensaje "Espere ...") que se muestra en el visor que no comprende XFA. El contenido real del documento se almacena como un archivo XML.
El proceso de acoplar un formulario XFA a un PDF ordinario requiere que analice el XML y convierta la sintaxis XML en sintaxis PDF. Esto se puede hacer con el trabajador XFA de iText: http://itextpdf.com/product/xfa_worker
Suponga que tiene un archivo en memoria (
ms
) que consiste en un formulario XFA que se completa, luego puede usar el siguiente código para aplanar ese formulario:
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();
Puede descargar un archivo zip que contiene las DLL para XFA Worker, así como un ejemplo aquí: http://itextsupport.com/download/xfa-net.zip
Sin embargo: como muchos desarrolladores están utilizando la versión AGPL de iTextSharp en un contexto comercial sin comprar una licencia comercial, hemos decidido no abrir XFA Worker de código abierto. Puede obtener una clave de licencia para un período de prueba, pero es un producto comercial creado sobre la versión comercial de iTextSharp. XFA Worker solo puede usarse en producción si compra una licencia de iText Software. Esto también es cierto para iTextSharp, pero con iTextSharp, no existe una clave de licencia que impida el uso si no compra una licencia comercial. Para iTextSharp, contamos con honestidad. Para XFA Worker, tomamos algunas precauciones ;-)