Ответ 1
Вы можете использовать BaseFont.getWidthPoint(String text, float fontSize)
, чтобы получить ширину строки в pt.
Или поместите строку в Chunk и сделайте chunk.getWidthPoint()
Я использую iText для записи PDF. В некоторых случаях мне нужно подписать PDF файл с помощью функции SetVisibleSignature
. С помощью этой функции нам нужно обозначить прямоугольник, в который мы будем записывать содержимое.
Но мне сложно рассчитать, насколько широка будет строка, чтобы я мог установить прямоугольник перед установкой подписи в PDF.
Как я могу рассчитать ширину строки в iText?
Вы можете использовать BaseFont.getWidthPoint(String text, float fontSize)
, чтобы получить ширину строки в pt.
Или поместите строку в Chunk и сделайте 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
);