2009-06-25 10 views
14

Devo compilare i campi 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 il PDF modificato.Utilizzare iText (iTextSharp) per compilare i campi modulo XFA in PDF?

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

I puntatori a risorse non standard sarebbero utili (ho già effettuato il googling richiesto sull'argomento e non ho trovato nulla di utile).

Gli esempi di codice qui sarebbero fantastici per chiunque abbia effettivamente fatto ciò che sto cercando di fare.

+1

Ho appena cercato nel libro "iText in azione" e si legge "Forme come queste non sono discusse in questo libro" quindi non comprare questo libro nella speranza di una risposta. –

risposta

5

Se è possibile ottenere un pacchetto di dati nel PDF, il runtime XFA in Acrobat popolerà quei campi con i dati nel pacchetto di dati.

Se si desidera vedere come appare uno di questi, creare un modulo in LiveCycle Designer (fornito con Acrobat Pro), aggiungere alcuni campi e salvarlo come PDF dinamico. Apri il modulo in Acrobat e digita alcuni valori nei campi e salvalo.

Aprire il PDF con uno strumento che consente di eseguire il peer dei dati PDF e trovare/Catalogo/AcroForm/XFA uno stream con un pacchetto > xfa: dataset > con i valori immessi. Questo è quello che dovrai creare da solo e inserire nel PDF.

La specifica XDP include una descrizione del pacchetto di dati e dell'algoritmo di fusione. Lo si può trovare qui:

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

In alternativa, comprate il server LiveCycle di Adobe che permette di fare tutto questo a livello di codice in vari modi, anche attraverso le chiamate di servizio web.

+0

Questa è un'informazione utile @stevex. Molto apprezzato. Ho visto la xfa: set di dati pezzo di dati (o quello che ho pensato corrisponde a quello) quando guardo gli oggetti all'interno di iTextSharp. –

0

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

+0

No. È un modulo generato da un GOV che devo modificare e quindi le persone dovranno inviare di nuovo il gov. –

+1

Il libro non è aggiornato: dal 2006 esiste un supporto XFA. Per gli esempi, vedere http://1t3xt.info/examples/browse/?page=example&id=433 e http://1t3xt.info/examples/browse /? page = example & id = 441 – JasonPlutext

+0

Questi collegamenti sono morti, si prega di aggiornare –

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

Questo è un grande codice, grazie! Potresti darci un esempio del formato XML da inserire in FillXfaForm? Grazie! –

1

Ho lo stesso problema e credo 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" 

Caricare il PDF in una variabile:

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

Ispezionare questo oggetto:

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

Cosa si dovrebbe vedere, è che tutti i campi del PDF sono in questo oggetto come una proprietà. È possibile ottenere una visualizzazione rapida di tutti i campi di questo tipo:

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

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