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?

19
demandé sur TT. 2009-10-06 18:35:50

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()

24
répondu Jan Soltis 2009-10-26 14:16:58

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());
13
répondu rveach 2015-01-29 20:16:11

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
);
2
répondu TT. 2016-12-15 14:55:52