2009-10-06 24 views
19

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 vamos a escribir el contenido.¿Cómo calcular el ancho de la cuerda en iText?

Pero es difícil para mí calcular qué tan ancha será la cuerda, de modo que pueda establecer el rectángulo antes de establecer una firma en el PDF.

¿Cómo puedo calcular el ancho de la cuerda en iText?

Respuesta

24

Puede usar BaseFont.getWidthPoint(String text, float fontSize) para obtener el ancho de la cadena en pt.

O colocar la cadena en un pedazo y el hacer chunk.getWidthPoint()

+0

¿cómo recuperas la instancia basefont? –

+0

Me gustaría saber el ancho de los párrafos en una tabla. Parece que el método que usa un trozo devuelve los valores incorrectos. –

+0

¿Cómo estática 'getWidthPoint' sabría qué fuente se supone? x_X –

12

La respuesta aceptada BaseFont.getWidthPoint, no funcionará en 5.5.4 itext ya que el método no es estática más. Incluso si todavía existe, no tiene en cuenta la fuente verdadera que se utiliza (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 por el ancho, especialmente si el trozo no está planificado para ser usado más tarde.

Este es el código subyacente para chunk.getWidthPoint() de usar como un sustituto independiente, asumiendo que no está haciendo cualquier escala horizontal:

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

que terminé haciendo esto con ColumnText.getWidth(Phrase phrase) al tamaño de lo que el ancho de un Phrase haría antes de mostrarlo con ColumnText.showTextAligned.

En este fragmento, utilicé el ColumnText.getWidth para medir la longitud de una cadena y colocarla en la parte superior derecha de la página. Funciona en retrato 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 
); 
Cuestiones relacionadas