2017-06-19 6 views
0

J'ai créé un modèle PDF comprenant des champs de formulaire interactifs. Le modèle PDF se compose de champs de texte à une seule ligne ainsi que de plusieurs lignes. Certains sont alignés à gauche et d'autres sont alignés à droite. Je veux que le texte des champs multilignes soit aligné à droite, mais il montre l'alignement par défaut à gauche. J'ai également fait les changements et sélectionné l'alignement à droite dans les propriétés du champ. Mais toujours pas de chanceComment aligner le champ de texte multi-lignes droit dans les formulaires PDF?

J'utilise i-text pour remplir dynamiquement les champs des formulaires. Tous les paramètres d'alignement sont définis dans le PDF, mais les champs multilignes ne s'alignent pas correctement selon ma conception de modèle. Voir l'image

enter image description here

Et quand je prévisualise que PDF créé dynamiquement dans le navigateur Chrome l'alignement ne change pas à droite.

Les champs qui sont alignés à gauche fonctionnent correctement. Quelqu'un peut-il suggérer ce que je manque?

+0

Avez-vous lu la documentation? Utilisez-vous iText 5 ou iText 7? –

Répondre

0

Vous ne nous dites pas si vous voulez une solution dans laquelle vous modifiez l'alignement manuellement (en utilisant un outil avec une interface graphique) ou par programmation (en utilisant iText).

Si vous souhaitez modifier manuellement l'alignement d'un champ, ouvrez le modèle PDF (le formulaire) dans Adobe Acrobat et sélectionnez l'option permettant de modifier les champs AcroForm. Changez l'alignement de gauche à droite.

Si vous souhaitez modifier l'alignement par programme, vous devez nous indiquer si vous utilisez iText 7 (ce qui est normal) ou iText 5 (ce que vous pourriez faire).

Si vous utilisez iText 7, l'alignement est défini comme ceci:

PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); 
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true); 
Map<String, PdfFormField> fields = form.getFormFields(); 
PdfFormField field; 
field = fields.get("personal.name"); 
field.setJustification(PdfFormField.ALIGN_LEFT); 
field.setValue("Test"); 
field = fields.get("personal.loginname"); 
field.setJustification(PdfFormField.ALIGN_CENTER); 
field.setValue("Test"); 
field = fields.get("personal.password"); 
field.setJustification(PdfFormField.ALIGN_RIGHT); 
field.setValue("Test"); 
field = fields.get("personal.reason"); 
field.setValue("Test"); 
pdfDoc.close(); 

Voir aussi How to align AcroFields? dans la FAQ officielle iText.

Si vous utilisez iText 5, l'alignement est défini comme ceci:

PdfReader reader = new PdfReader(src); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
AcroFields form = stamper.getAcroFields(); 
AcroFields.Item item; 
item = form.getFieldItem("personal.name"); 
item.getMerged(0).put(PdfName.Q, new PdfNumber(PdfFormField.Q_LEFT)); 
item = form.getFieldItem("personal.loginname"); 
item.getMerged(0).put(PdfName.Q, new PdfNumber(PdfFormField.Q_CENTER)); 
item = form.getFieldItem("personal.password"); 
item.getMerged(0).put(PdfName.Q, new PdfNumber(PdfFormField.Q_RIGHT)); 
form.setField("personal.name", "Test"); 
form.setField("personal.loginname", "Test"); 
form.setField("personal.password", "Test"); 
form.setField("personal.reason", "Test"); 
stamper.close(); 
reader.close(); 

Voir aussi How to align AcroFields? dans la langue officielle iText FAQ.

Comme vous pouvez le voir, le code iText 7 est plus élégant et plus facile à comprendre.

+0

Bonjour Bruno, j'utilise iText 7 pour mon remplissage pdf. Y at-il un moyen de le faire fonctionner sans faire le changement dans mon code iText. –

+0

Vous posez une question de programmation sur Stack Overflow, et je vous ai donné la réponse (dans votre cas, utilisez la méthode 'setJustification()'). Maintenant, vous dites que vous voulez obtenir une solution sans avoir à changer votre code? Je ne suis pas sûr de bien comprendre la nature de votre question. Heureusement pour vous, vous pouvez toujours définir l'alignement dans le formulaire. De cette façon, vous n'avez en effet pas à changer votre code. J'ai mis à jour ma réponse. –

+0

J'ai essayé le code ci-dessus pour iText 7 mais ça ne marchera pas. En outre, mon application a une fonctionnalité de prévisualisation. L'utilisateur peut prévisualiser dans le navigateur PDF viewer. Il montre à gauche sur la prévisualisation mais si je télécharge le fichier et l'ouvre dans Adobe, l'alignement fonctionne. –