Frage

Ich brauche XFA-Formularfelder in einem PDF zu füllen (mit Adobe Livecycle Designer erstellt). Wir versuchen iText (eigentlich iTextSharp mit C #) zu verwenden, um das PDF zu analysieren, die XFA Felder füllen und dann die modifizierte PDF speichern wieder aus.

Alle Beispiele, die ich mit iText (sehr wenige iTextSharp Beispiele) sprechen über das Ändern AcroForm Felder finden. Das PDF hat NICHT AcroForm Felder und verwendet RFA nur.

Zeiger auf alle Nicht-Standard-Ressourcen wäre hilfreich (ich bereits die erforderliche zum Thema googeln getan haben und haben nichts Brauchbares gefunden).

Code-Beispiele hier wären von jemandem genial, die tatsächlich getan hat, was ich zu tun werde versuchen.

War es hilfreich?

Lösung

Wenn Sie ein Datenpaket in das PDF bekommen, die XFA Laufzeit in Acrobat die Felder mit den Daten in dem Datenpaket füllen würde.

Wenn Sie sehen wollen, was eine dieser aussieht, ein Formular in Livecycle Designer erstellen (kommt mit Acrobat Pro), fügen Sie einige Felder, und es als dynamisches PDF speichern. Öffnen Sie das Formular in Acrobat, und geben Sie einige Werte in die Felder und speichern.

öffnen Sie das PDF mit einem Werkzeug, das Sie an den PDF-Daten Peer kann und Sie finden / Katalog / AcroForm / XFA einen Strom, der eine hat von Ihnen eingegebenen Paket mit den Werten. Das ist, was Sie selbst erstellen müssen und in das PDF-Format.

Die XDP spec enthält eine Beschreibung des Datenpakets und dem merge-Algorithmus. Sie können es hier finden:

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

Alternativ kaufen Sie den Livecycle-Server von Adobe, die Sie das alles programmatisch in einer Reihe von Möglichkeiten, unter anderem durch Web-Service-Anrufe können zu tun.

Andere Tipps

iTextSharp kann mit RFA arbeiten. Um alle Zweifel zu entfernen, nehmen Sie bitte einen Blick auf Probe auf iText Website:

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

Ich habe das gleiche Problem, und ich denke, dass ich die Lösung gefunden. Ich verwende Powershell das PDF-Objekt zu überprüfen.

Laden Sie das iTextSharp DLL.

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

Laden Sie das PDF in eine Variable:

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

Überprüfen Sie dieses Objekt:

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

Was Sie sehen sollten, ist, dass alle Felder auf dem PDF in diesem Objekt als Eigenschaft sind. Sie können einen schnellen Überblick über alle Felder wie diese:

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

Das sollte das magische Ticket sein. Diese Lage ist beiden Felder aus der ursprünglichen Form und den RFA Teil des Formulars.

Es sagt in dem Buch, dass, weil itext dies nicht tun. Können Sie Ihre PDF-Format konvertieren?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top