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?

Foi útil?

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
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top