Como calcular a largura da string no iText?
-
20-09-2019 - |
Pergunta
Estou usando o iText para escrever um PDF. Em alguns casos, preciso assinar o pdf com o SetVisibleSignature
função. Com essa função, precisamos designar o retângulo em que escreveremos o conteúdo.
Mas é difícil para mim calcular a largura da string, para que eu possa definir o retângulo antes de definir uma assinatura no PDF.
Como posso calcular a largura da string no iText?
Solução
Você pode usar BaseFont.getWidthPoint(String text, float fontSize)
Para obter a largura da string em Pt.
Ou coloque a corda em um pedaço e faça chunk.getWidthPoint()
Outras dicas
A resposta aceita BaseFont.getWidthPoint
, não funcionará no iText 5.5.4 Como o método não é mais estático. Mesmo que ainda existisse, não leva em consideração a fonte verdadeira que está sendo usada (sua família ou sua ousada/itálica), pois é estática e está recebendo parâmetros limitados.
chunk.getWidthPoint()
Funciona com a fonte verdadeira como afirmado posteriormente, mas para certos usos, é um desperdício para criar constantemente um pedaço apenas para a largura, especialmente se o pedaço não estiver planejado para ser usado mais tarde.
Este é o código subjacente para chunk.getWidthPoint()
Para usar como substituto independente, supondo que você não esteja fazendo nenhuma escala horizontal:
font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
Acabei fazendo isso com ColumnText.getWidth( Phrase phrase )
Para dimensionar qual a largura de um Phrase
seria antes de mostrá -lo com ColumnText.showTextAligned
.
Neste trecho, eu usei o ColumnText.getWidth
Para dimensionar o comprimento de uma corda para colocá -la no canto superior direito de uma página. Funciona no retrato A4, não o testou ainda mais.
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
);