Текст с дясно подравняване в 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