Pregunta

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

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 AcroForm y solo usa XFA.

Los punteros a cualquier recurso no estándar serían útiles (ya he hecho el google requerido sobre el tema y no he encontrado nada útil).

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

¿Fue útil?

Solución

Si puede obtener un paquete de datos en el PDF, el tiempo de ejecución XFA en Acrobat llenaría 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 (viene con 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 permite ver los datos del PDF y encontrará / Catalog / AcroForm / XFA una secuencia que tiene un < xfa: datasets > paquete con los valores que escribió. Eso es lo que necesitará para crearse e insertarlo en el PDF.

La especificación XDP incluye una descripción del paquete de datos y el algoritmo de fusión. Puedes encontrarlo 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 mediante programación de varias maneras, incluso a través de llamadas de servicio web.

Otros consejos

iTextSharp puede funcionar con XFA. Para eliminar todas las dudas, eche un vistazo a la muestra en el sitio web iText:

http://itextpdf.com/examples/iia.php?id=165

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();
}

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

Cargue la DLL 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"

Inspeccione este objeto:

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

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

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

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top