Подтвердить что ты не робот

Как рассчитать ширину строки в iText?

Я использую iText для записи PDF. В некоторых случаях мне нужно подписать PDF файл с помощью функции SetVisibleSignature. С помощью этой функции нам нужно обозначить прямоугольник, в который мы будем записывать содержимое.

Но мне сложно рассчитать, насколько широка будет строка, чтобы я мог установить прямоугольник перед установкой подписи в PDF.

Как я могу рассчитать ширину строки в iText?

4b9b3361

Ответ 1

Вы можете использовать BaseFont.getWidthPoint(String text, float fontSize), чтобы получить ширину строки в pt.

Или поместите строку в Chunk и сделайте chunk.getWidthPoint()

Ответ 2

Принятый ответ BaseFont.getWidthPoint не будет работать в itext 5.5.4, поскольку метод больше не статичен. Даже если он все еще существует, он не учитывает используемый истинный шрифт (его семейство или его полужирный/курсив), поскольку он статичен и получает ограниченные параметры.

chunk.getWidthPoint() работает с истинным шрифтом, как указано позже, но для определенных целей отходы постоянно создают кусок только для ширины, особенно если кусок не планируется использовать позднее.

Это базовый код для chunk.getWidthPoint() для использования в качестве автономной замены, если вы не выполняете горизонтальное масштабирование:

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

Ответ 3

В итоге я сделал это с ColumnText.getWidth( Phrase phrase ), чтобы определить ширину Phrase перед тем, как показывать его с ColumnText.showTextAligned.

В этом фрагменте я использовал ColumnText.getWidth для определения длины строки, чтобы разместить ее в верхней правой части страницы. Он работает в портрете A4, не тестировал его дальше.

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
);