Vous utilisez iText (iTextSharp) pour renseigner des champs de formulaire XFA au format PDF?

StackOverflow https://stackoverflow.com/questions/1041652

  •  22-07-2019
  •  | 
  •  

Question

Je dois renseigner les champs de formulaire XFA dans un fichier PDF (créé avec Adobe LiveCycle Designer). Nous essayons d'utiliser iText (en fait, iTextSharp avec C #) pour analyser le fichier PDF, renseigner les champs XFA, puis enregistrer le fichier PDF modifié.

Tous les exemples que je peux trouver avec iText (très peu d’exemples iTextSharp) parlent de la modification des champs AcroForm. Ce fichier PDF ne contient pas de champs AcroForm et utilise uniquement XFA.

Des pointeurs sur des ressources non standard seraient utiles (j'ai déjà effectué la recherche sur Google requise sur le sujet et je n'ai rien trouvé d'utile).

Les exemples de code présentés ici seraient géniaux pour quiconque a réellement fait ce que j'essaie de faire.

Était-ce utile?

La solution

Si vous pouvez obtenir un paquet de données dans le fichier PDF, le moteur d'exécution XFA dans Acrobat renseignera ces champs avec les données du paquet de données.

Si vous souhaitez savoir à quoi ressemble l'un de ces éléments, créez un formulaire dans LiveCycle Designer (fourni avec Acrobat Pro), ajoutez-y des champs et enregistrez-le au format PDF dynamique. Ouvrez le formulaire dans Acrobat, tapez des valeurs dans les champs et enregistrez-le.

Ouvrez le fichier PDF avec un outil qui vous permet d’analyser les données PDF et vous trouverez / Catalog / AcroForm / XFA un flux comportant un < xfa: datasets > paquet avec les valeurs que vous avez tapé. C'est ce dont vous aurez besoin pour créer vous-même et insérer dans le PDF.

La spécification XDP comprend une description du paquet de données et l'algorithme de fusion. Vous pouvez le trouver ici:

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

Vous pouvez également acheter le serveur LiveCycle auprès d'Adobe, ce qui vous permet d'effectuer tout cela par programme de plusieurs manières, notamment par le biais d'appels de service Web.

Autres conseils

iTextSharp peut fonctionner avec XFA. Pour éliminer tous les doutes, consultez un exemple sur le site 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();
}

J'ai le même problème et je pense avoir trouvé la solution. J'utilise Powershell pour inspecter l'objet pdf.

Chargez la DLL iTextSharp.

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

Chargez le PDF dans une variable:

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

Inspectez cet objet:

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

Ce que vous devriez voir, c’est que tous vos champs de votre PDF sont dans cet objet en tant que propriété. Vous pouvez obtenir une vue rapide de tous vos champs comme ceci:

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

Cela devrait être le ticket magique. Cet emplacement correspond aux deux champs du formulaire d'origine ET de la partie XFA du formulaire.

Cela est dit dans le livre car itext ne fait pas cela. Pouvez-vous convertir votre PDF?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top