Comment calculer la largeur de chaîne dans iText?
j'utilise iText pour écrire un PDF. Dans certains cas, je dois signer le PDF avec le SetVisibleSignature
fonction. Avec cette fonction, nous devons désigner le rectangle dans lequel nous écrirons le contenu.
mais il est difficile pour moi de calculer la largeur de la chaîne, de sorte que je puisse définir le rectangle avant de définir une signature sur le PDF.
Comment puis-je calculer la largeur de chaîne dans iText?
3 réponses
Vous pouvez utiliser BaseFont.getWidthPoint(String text, float fontSize)
pour obtenir la largeur de la chaîne dans pt.
ou mettre la corde dans un morceau et faire chunk.getWidthPoint()
la réponse acceptée BaseFont.getWidthPoint
, ne fonctionnera pas dans itext 5.5.4 puisque la méthode n'est plus statique. Même si elle existait encore, elle ne tient pas compte de la vraie police utilisée (sa famille ou ses caractères gras/italiques) car elle est statique et reçoit des paramètres limités.
chunk.getWidthPoint()
fonctionne avec la police true comme indiqué plus tard, mais pour certains usages c'est un gaspillage de créer constamment un morceau juste pour la largeur, surtout si le morceau n'est pas prévu sur être utilisé tard.
C'est le code sous-jacent pour chunk.getWidthPoint()
à utiliser comme un substitut autonome, en supposant que vous ne faites pas de mise à l'échelle horizontale:
font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
j'ai fini par le faire avec ColumnText.getWidth( Phrase phrase )
pour la taille de ce que la largeur d'un Phrase
avant de le montrer avec ColumnText.showTextAligned
.
Dans cet extrait de code, j'ai utilisé le ColumnText.getWidth
pour mesurer la longueur d'une corde pour la placer en haut à droite d'une page. Il fonctionne dans le portrait A4, Je ne l'ai pas testé davantage.
Phrase phrase = new Phrase( "Bla bla bla!", new Font( FontFamily.HELVETICA, 9 ) );
float width = ColumnText.getWidth( phrase );
ColumnText.showTextAligned (
canvas,
Element.ALIGN_LEFT,
phrase,
canvas.getPdfDocument( ).right( ) - width,
canvas.getPdfDocument( ).top( ) + 9,
0
);