Как рассчитать ширину строки в iText? - PullRequest
22 голосов
/ 06 октября 2009

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

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

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

Ответы [ 3 ]

26 голосов
/ 26 октября 2009

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

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

15 голосов
/ 29 января 2015

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

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

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

font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
3 голосов
/ 15 декабря 2016

Я закончил тем, что сделал это с 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
);
...