Domanda

Devo compilare i campi del modulo XFA in un PDF (creato con Adobe LiveCycle Designer).Stiamo tentando di utilizzare iText (in realtà iTextSharp con C#) per analizzare il PDF, compilare i campi XFA e quindi salvare nuovamente il PDF modificato.

Tutti gli esempi che riesco a trovare con iText (pochissimi esempi di iTextSharp) parlano della modifica dei campi AcroForm.Questo PDF NON ha campi AcroForm e utilizza solo XFA.

Sarebbero utili suggerimenti su eventuali risorse non standard (ho già cercato su Google l'argomento e non ho trovato nulla di utile).

Gli esempi di codice qui sarebbero fantastici da chiunque abbia effettivamente fatto quello che sto cercando di fare.

È stato utile?

Soluzione

Se riesci a inserire un pacchetto di dati nel PDF, il runtime XFA in Acrobat popolerà quei campi con i dati nel pacchetto di dati.

Se vuoi vedere come appare uno di questi, crea un modulo in LiveCycle Designer (fornito con Acrobat Pro), aggiungi alcuni campi e salvalo come PDF dinamico.Apri il modulo in Acrobat e digita alcuni valori nei campi e salvalo.

Apri il PDF con uno strumento che ti consenta di esaminare i dati PDF e troverai /Catalog/AcroForm/XFA un flusso che contiene un pacchetto <xfa:datasets> con i valori digitati.Questo è ciò che ti servirà per crearlo tu stesso e inserirlo nel PDF.

Le specifiche XDP includono una descrizione del pacchetto di dati e dell'algoritmo di unione.Potete trovare qui:

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

In alternativa, acquisti il ​​server LiveCycle da Adobe che ti consente di fare tutto questo a livello di programmazione in diversi modi, anche tramite chiamate al servizio web.

Altri suggerimenti

iTextSharp può funzionare con XFA. Per rimuovere tutti i dubbi, dai un'occhiata all'esempio sul sito 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();
}

Ho lo stesso problema e penso di aver trovato la soluzione. Sto usando Powershell per ispezionare l'oggetto pdf.

Carica la DLL iTextSharp.

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

Carica il PDF in una variabile:

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

Ispeziona questo oggetto:

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

Quello che DEVI vedere è che tutti i tuoi campi sul tuo PDF sono in questo oggetto come una proprietà. Puoi avere una rapida visione di tutti i tuoi campi in questo modo:

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

Questo dovrebbe essere il biglietto magico. Questa posizione è entrambi i campi del modulo originale E la parte XFA del modulo.

Lo dice nel libro perché itext non lo fa. Puoi convertire il tuo PDF?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top