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

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

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

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

3 ответа

Решение

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

Или положить строку в чанк и сделать chunk.getWidthPoint()

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

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

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

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

Я сделал это с 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
);
Другие вопросы по тегам