c# pdf itext xfa

c# - ¿Está utilizando iText(iTextSharp) para rellenar los campos de formulario XFA en PDF?



(5)

Dice eso en el libro porque el siguiente no hace esto. ¿Puedes convertir tu PDF?

Necesito rellenar los campos de formulario XFA en un PDF (creado con Adobe LiveCycle Designer). Estamos intentando usar iText (en realidad iTextSharp con C #) para analizar el PDF, rellenar los campos XFA y luego volver a guardar el PDF modificado.

Todos los ejemplos que puedo encontrar con iText (muy pocos ejemplos de iTextSharp) hablan sobre la modificación de los campos de AcroForm. Este PDF NO tiene campos de AcroForm y usa solo XFA.

Los punteros a cualquier recurso no estándar serían útiles (ya hice el Google Googlear requerido en el tema y no encontré nada útil).

Los ejemplos de código aquí serían asombrosos para cualquiera que haya hecho lo que estoy tratando de hacer.


Si puede obtener un paquete de datos en el PDF, el tiempo de ejecución de XFA en Acrobat llenará esos campos con los datos en el paquete de datos.

Si desea ver cómo se ve uno de estos, cree un formulario en LiveCycle Designer (incluye Acrobat Pro), agregue algunos campos y guárdelo como un PDF dinámico. Abra el formulario en Acrobat y escriba algunos valores en los campos y guárdelo.

Abra el PDF con una herramienta que le permita mirar los datos del PDF y encontrará / Catalog / AcroForm / XFA una secuencia que tiene un paquete <xfa: datasets> con los valores que escribió. Eso es lo que necesitarás para crearte e insertarlo en el PDF.

La especificación XDP incluye una descripción del paquete de datos y el algoritmo de combinación. Lo puedes encontrar aquí:

http://partners.adobe.com/public/developer/xml/index_arch.html

Alternativamente, usted compra el servidor LiveCycle de Adobe, que le permite hacer todo esto de manera programática de varias maneras, incluso a través de llamadas de servicio web.


Tengo el mismo problema y creo que encontré la solución. Estoy utilizando Powershell para inspeccionar el objeto pdf.

Cargue la DLL de iTextSharp.

Add-Type -Path "C:/Users/micah/Desktop/itextsharp.dll"

Cargue el PDF en una variable:

$PDF = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList "C:/Users/micah/Desktop/test.pdf"

Inspeccionar este objeto:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Get-Member

Lo que DEBE ver, es que todos los campos de su PDF están en este objeto como una propiedad. Puede obtener una vista rápida de todos sus campos como este:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Select-Object -Property "*"

Ese debería ser el boleto mágico. Esta ubicación corresponde a los dos campos del formulario original Y a la parte XFA del formulario.



using (FileStream existingPdf = new FileStream("existing.pdf", FileMode.Open)) using (FileStream sourceXml = new FileStream("source.xml", FileMode.Open)) using (FileStream newPdf = new FileStream("new.pdf", FileMode.Create)) { // Open existing PDF PdfReader pdfReader = new PdfReader(existingPdf); // PdfStamper, which will create PdfStamper stamper = new PdfStamper(pdfReader, newPdf); stamper.AcroFields.Xfa.FillXfaForm(sourceXml); stamper.Close(); pdfReader.Close(); }