Comment générer plusieurs lignes dans le fichier PDF à l'aide d'Apache pdfbox
Je suis en utilisant Pdfbox de générer des fichiers PDF à l'aide de Java. Le problème est que lorsque j'ajoute un long texte contenu dans le document, il n'est pas affiché correctement. Seule une partie de ce qui est affiché. Que trop dans une seule ligne.
Je souhaitez un texte sur plusieurs lignes.
Mon code est donné ci-dessous:
PDPageContentStream pdfContent=new PDPageContentStream(pdfDocument, pdfPage, true, true);
pdfContent.beginText();
pdfContent.setFont(pdfFont, 11);
pdfContent.moveTextPositionByAmount(30,750);
pdfContent.drawString("I am trying to create a PDF file with a lot of text contents in the document. I am using PDFBox");
pdfContent.endText();
Ma sortie:
- Exemple de travail est ici stackoverflow.com/questions/32308964/...
Vous devez vous connecter pour publier un commentaire.
Ajouter à la réponse de Marque, vous voulez savoir où couper votre longue chaîne. Vous pouvez utiliser le
PDFont
méthodegetStringWidth
pour que.De tout mettre ensemble, vous obtenez quelque chose comme ceci (avec de légères différences en fonction de la PDFBox version):
PDFBox 1.8.x
(BreakLongString.java test
testBreakString
pour PDFBox 1.8.x)PDFBox 2.0.x
(BreakLongString.java test
testBreakString
pour PDFBox 2.0.x)Le résultat
Cela ressemble comme prévu.
Bien sûr, il ya de nombreuses améliorations à faire, mais cela devrait montrer comment le faire.
Ajoutant inconditionnel des sauts de ligne
Dans un commentaire aleskv demandé:
On peut facilement étendre la solution à inconditionnellement pause à caractères de saut de ligne en premier fractionnement de la chaîne '\n' personnages et puis en itérant sur le split résultat.
E. g. si, au lieu de la longue chaîne à partir de ci-dessus
vous voulez traiter de cette même longue chaîne avec des incorporés de caractères de nouvelle ligne
vous pouvez simplement remplacer
dans les solutions ci-dessus par
(à partir de BreakLongString.java test
testBreakStringNL
)Le résultat:
Je sais c'est un peu tard, mais j'ai eu un peu de problème avec la mkl la solution. Si la dernière ligne ne contenir qu'un seul mot, un algorithme écrit sur la précédente.
Par Exemple: "Lorem ipsum dolor sit amet" est votre texte et il faut ajouter un saut de ligne après la "assis".
Mais il ne fait cela:
Je suis venu avec ma propre solution, je veux partager avec vous.
(spaceIndex < 0)
(c'est à dire le dernier mot) doivent être traités différemment. Votre réponse m'a rappelé à fait de mise à jour de la réponse en conséquence.Il suffit de dessiner la chaîne dans une position ci-dessous, fait habituellement à l'intérieur d'une boucle:
Ce sont les lignes importantes:
Juste garder de créer de nouvelles chaînes dans de nouvelles positions. Pour un exemple à l'aide d'un tableau, voir ici:
http://fahdshariff.blogspot.ca/2010/10/creating-tables-with-pdfbox.html
contentStream.moveTextPositionByAmount(textes clients,texty) est le point clé.
disons, par exemple, si vous utilisez un format A4 signifie 580,800 est la largeur et la hauteur correspondling(environ). donc, vous devez déplacer votre texte en fonction de la position de votre taille du document.
PDFBox prend en charge varie en fonction du format de page . ainsi, la hauteur et la largeur varient en fonction du format de page