2016-05-24 1 views
2

J'essaie d'ajouter des choix à un champ de liste dans un formulaire pdf via C# et la bibliothèque itextsharp. Mais je ne peux pas trouver un moyen de le faire. Le formulaire existe déjà, je l'ai créé avec Acrobat. Je voudrais que les choix Listfield du PDF soient les mêmes que dans mon programme. Par conséquent, je veux créer les options dans les champs de liste via itextsharp pour réduire la maintenance. Mais je ne peux pas trouver loin de le faire. Avec le PDFstamper de la bibliothèque, je suis capable de remplir les champs du formulaire. Et Colorie certains champs. Y at-il une possibilité d'ajouter des options à un champ de liste via C# Code? Serait génial si quelqu'un connaît la réponse et me montre un moyen de réaliser cela.Ajout de listchoices à Pdfform avec C# code

Répondre

0

Si vous utilisez iText 7, c'est facile. Cela est expliqué dans le chapitre 5 du iText 7 jump-start tutorial: Manipulating an existing PDF document

PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true); 
Map<String, PdfFormField> fields = form.getFormFields(); 
List<PdfString> options = new ArrayList<PdfString>(); 
options.add(new PdfString("Any")); 
options.add(new PdfString("8.30 am - 12.30 pm")); 
options.add(new PdfString("12.30 pm - 4.30 pm")); 
options.add(new PdfString("4.30 pm - 8.30 pm")); 
options.add(new PdfString("8.30 pm - 12.30 am")); 
options.add(new PdfString("12.30 am - 4.30 am")); 
options.add(new PdfString("4.30 am - 8.30 am")); 
PdfArray arr = new PdfArray(options); 
fields.get("shift").setOptions(arr); 

iText 7 existe actuellement seulement pour Java; la version C# sera disponible dans 2 semaines.

Si vous utilisez iText 5, alors vous devez consulter Chapter 8 of iText in Action - Second Edition, plus précisément à l'ChoiceFields exemple:

AcroFields form = stamper.getAcroFields(); 
form.setField("choice_1", "NL"); 
form.setListSelection("choice_2", new String[]{"German", "Spanish"}); 
String[] languages = form.getListOptionDisplay("choice_3"); 
String[] exportvalues = form.getListOptionExport("choice_3"); 
int n = languages.length; 
String[] new_languages = new String[n + 2]; 
String[] new_exportvalues = new String[n + 2]; 
for (int i = 0; i < n; i++) { 
    new_languages[i] = languages[i]; 
    new_exportvalues[i] = exportvalues[i]; 
} 
new_languages[n] = "Chinese"; 
new_exportvalues[n] = "CN"; 
new_languages[n + 1] = "Japanese"; 
new_exportvalues[n + 1] = "JP"; 
form.setListOption("choice_3", new_exportvalues, new_languages); 
form.setField("choice_3", "CN"); 
form.setField("choice_4", "Japanese"); 

Le code ci-dessus est le code Java, mais vous pouvez aussi l'interpréter comme « pseudo-code » si vous ne voulez pas lire Java.

Tous les exemples du livre iText in Action sont convertis en C#. Voir ChoiceFields.cs pour l'exemple complet d'iText 5.

Important: Je suppose que vous avez créé le formulaire avec Acrobat et que votre formulaire est basé sur la technologie AcroForm. Si vous avez créé votre formulaire avec LiveCycle, vous disposez d'un formulaire XFA. Le code partagé dans cette réponse ne fonctionnera pas pour les formulaires XFA.

+0

Merci qui m'a aidé beaucoup – Lukas