pdfwriter - itext tablas ejemplos
¿Cómo calcular el ancho de la cuerda en iText? (3)
Estoy usando iText para escribir un PDF. En algunos casos, necesito firmar el PDF con la función SetVisibleSignature
. Con esta función, necesitamos designar el rectángulo en el que escribiremos el contenido.
Pero me resulta difícil calcular la anchura de la cadena, de modo que pueda configurar el rectángulo antes de establecer una firma en el PDF.
¿Cómo puedo calcular el ancho de la cadena en iText?
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 existiera, no tiene en cuenta la fuente verdadera que se está utilizando (su familia o su negrita / cursiva) ya que es estática y está recibiendo parámetros limitados.
chunk.getWidthPoint()
funciona con la fuente verdadera como se indica más adelante, pero para ciertos usos es un desperdicio crear constantemente un trozo solo para el ancho, especialmente si el trozo no se planea usar más adelante.
Este es el código subyacente para que chunk.getWidthPoint()
use como un sustituto independiente, asumiendo que no está realizando ninguna escala horizontal:
font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
Puede usar BaseFont.getWidthPoint(String text, float fontSize)
para obtener el ancho de la cadena en pt.
O ponga la cadena en un chunk.getWidthPoint()
y haga chunk.getWidthPoint()
Terminé haciendo esto con ColumnText.getWidth( Phrase phrase )
para ColumnText.getWidth( Phrase phrase )
el ancho de una Phrase
antes de mostrarlo con ColumnText.showTextAligned
.
En este fragmento, utilicé ColumnText.getWidth
para dimensionar la longitud de una cadena para colocarla en la parte superior derecha de una página. Funciona en el retrato A4, no lo he 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
);