Выравнивание текста по правому краю в PDFBOX?

Мне нужно нарисовать текст с правильным выравниванием, используя PDFBOX (java).

В настоящее время я использую ContentStream.drawString для рисования текста в формате PDF. Я не использую моноширинный шрифт, поэтому ширина символов варьируется.

Любые идеи?


person Mirror318    schedule 02.06.2014    source источник


Ответы (2)


Простое решение!

text_width = (myFont.getStringWidth(myString) / 1000.0f) * fontSize;
contentStream.moveTextPositionByAmount(-text_width, 0);
contentStream.drawString(myString);
contentStream.moveTextPositionByAmount(text_width, 0);

Где myFont = используемый вами шрифт, fontSize — размер шрифта, а myString — строка текста, которую вы хотите нарисовать.

person Mirror318    schedule 03.06.2014
comment
Я предполагаю, что для простоты этот код не принимает во внимание горизонтальное масштабирование, интервалы между символами и слова. - person mkl; 17.09.2014
comment
Да, извините, наверное, это был баг. В основном вы получаете (физическую) длину строки, перемещаете курсор назад, печатаете строку, снова перемещаете курсор вправо. - person Mirror318; 18.10.2015
comment
Зачем делить на 1000? - person Chad Bingham; 21.03.2017

Я основывал свой ответ на этом @mirror31

    float pagewidth = page.getMediaBox().getWidth();
    float text_width = (font.getStringWidth(text) / 1000.0f) * size;
    float x = pagewidth - ((paddingRight * 2) + text_width);

    contentStream.newLineAtOffset(x, 0);
    contentStream.setFont(font, size);
    contentStream.showText(text);
    contentStream.newLineAtOffset(-x, 0);

Я надеюсь, что это может помочь кому-то

person Raph    schedule 04.08.2018