Pregunta

Estoy usando Itext para escribir un PDF. En algunos casos, necesito firmar el PDF con el SetVisibleSignature función. Con esta función, necesitamos designar el rectángulo en el que escribiremos el contenido.

Pero es difícil para mí calcular cuán ancha será la cadena, para que pueda establecer el rectángulo antes de configurar una firma en el PDF.

¿Cómo puedo calcular el ancho de la cadena en Itext?

¿Fue útil?

Solución

Puedes usar BaseFont.getWidthPoint(String text, float fontSize) Para obtener el ancho de la cadena en Pt.

O pon la cuerda en un trozo y haz chunk.getWidthPoint()

Otros consejos

La respuesta aceptada BaseFont.getWidthPoint, no funcionará en ITEXT 5.5.4 ya que el método ya no es estático. Incluso si aún existía, no tiene en cuenta la verdadera fuente que se está utilizando (su familia o su en negrita/cursiva) ya que es estático y recibe parámetros limitados.

chunk.getWidthPoint() Funciona con la fuente verdadera como se indicó más tarde, pero a ciertos usos es un desperdicio crear constantemente un trozo solo para el ancho, especialmente si la fragmentación no se planea ser utilizada más adelante.

Este es el código subyacente para chunk.getWidthPoint() para usar como sustituto independiente, suponiendo que no esté haciendo ninguna escala horizontal:

font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());

Terminé haciendo esto con ColumnText.getWidth( Phrase phrase ) para dimensionar lo que el ancho de un Phrase sería antes de mostrarlo con ColumnText.showTextAligned.

En este fragmento, usé el ColumnText.getWidth Para dimensionar la longitud de una cadena para colocarla en la parte superior de una página. Funciona en Portrait A4, no lo ha probado más.

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
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top