2015-11-23 1 views
0

J'ai un certain nombre de fichiers PDF dynamiques XFA qui ont été créés avec Livecycle Designer. Ces PDF sont utilisés comme modèles pour les différentes personnes à remplir. Quand un utilisateur demande un modèle, nous devons écrire un bouton de soumission avec l'URL pointant vers une application .net pour le traitement et mettre à jour certains des champs avec des informations de la base de données dans le PDF. Puis-je utiliser iText (Sharp) avec .net pour mettre à jour le fichier xfa pdf dynamique pour y écrire un bouton de soumission et mettre à jour les champs, puis utiliser iText (Sharp) pour traiter le formulaire de retour. Nous faisons cela maintenant avec Acroforms, mais nous devons faire de même pour les formulaires Dynamic XFA. Je ne trouve aucune information de confirmation que cela est possible. Si c'est possible, quelqu'un a-t-il du code à partager pour me montrer comment faire?Formulaires PDF XFA dynamiques

+0

XFA est très différent de la technologie AcroForm. Changer un formulaire XFA nécessite que vous [a.] Extrayez le XML qui décrit le formulaire depuis son conteneur PDF (possible avec iText), [b.] Mettez à jour le XML (en dehors de la portée d'iText: faites cela avec n'importe quel outil de manipulation XML) , puis [c.] remet le XML dans le containeur PDF (possible avec iText). [a.] et [c.] sont faciles à répondre; [b.] exige que vous compreniez parfaitement la spécification XFA. –

Répondre

0

Vous pouvez également réaliser cela en plaçant le contenu du pdf dans un document Xml et en travaillant comme vous travailliez avec un XML. C'est le code que j'utilise pour remplacer certains espaces réservés écrits dans des zones de texte.

PdfReader pdfReader = new PdfReader(path_pdf); 
using (PdfStamper pdfStamp = new PdfStamper(pdfReader, new FileStream(temp_path, FileMode.Create), '\0', true)) 
{ 
    pdfStamp.ViewerPreferences = PdfWriter.AllowModifyContents; 
    XmlDocument xmlDocument = pdfReader.AcroFields.Xfa.DomDocument; 
    string pdfContent = xmlDocument.InnerXml; 
    string newpdfContent = pdfContent 
     .Replace("$CONTENT_TO_REPLACE_1$", "some_content") 
     .Replace("$CONTENT_TO_REPLACE_2$", "some_other_content") 

    xmlDocument.InnerXml = newpdfContent; 
    Stream stream = GenerateStreamFromString(newpdfContent); 
    pdfStamp.AcroFields.Xfa.FillXfaForm(stream); 
    pdfStamp.AcroFields.Xfa.DomDocument = xmlDocument; 
    pdfStamp.Close(); 
}