Распечатать подстроку маленьким шрифтом в формате PDF

Я использую приведенный ниже код для печати строки в формате PDF, которая дает мне выход из строки того же размера, я хочу сделать последние две строки с разным размером шрифта. Как я могу это сделать?

PdfContentByte cb = writer.getDirectContent();

    String stl = "", stl1 = (String) request.getParameter("x0");//                        (String)val.get(0);
        int ln = stl1.length();
        String new1 ="" ;
        if (ln > 1)
        {
            for (int ii = 0; ii < ln - 2; ii++)
                stl = stl + stl1.charAt(ii);
            stl = stl + " . ";
            stl1 = stl1.substring(ln - 2, ln);
            new1 = stl + stl1;
            //stl1 = stl + stl1;

        }
        cb.setFontAndSize(bf, 18); 
        cb.setTextRenderingMode(2);
        //cb.showTextAligned(PdfContentByte.ALIGN_LEFT, stl1, 20 + x, 663 + y, 0);
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT, new1, 20 + x, 663 + y, 0);

Желаемый результат:

2 ответа

Решение

Лучший способ сделать это - напечатать отдельную строку после первой, которая содержит последние 2 цифры.

Пример кода:

1) Заменить String new1 ="" ; с этим:

String textLarge ="" ;
String textSmall ="" ;

2) Заменить new1 = stl + stl1; со следующим:

textLarge = stl;
textSmall = stl1;

3) Измените код, чтобы печатать большой и маленький текст отдельно

cb.setFontAndSize(bf, 18);        
cb.showTextAligned(PdfContentByte.ALIGN_LEFT, textLarge, 20 + x, 663 + y, 0);
cb.setFontAndSize(bf, 14);        
cb.showTextAligned(PdfContentByte.ALIGN_LEFT, textSmall, 20 + ? + x, 663 + y, 0);

Заменить "?" в строке выше с напечатанной шириной большого текста. Похоже, вы используете itext, поэтому вы можете использовать либо:BaseFont.getWidthPoint(String text, float fontSize) чтобы получить ширину строки в пт. Или положить строку в чанк и сделать chunk.getWidthPoint()

Предыдущий ответ правильный, но есть и альтернативный способ сделать это. Если вы хотите расположить текст по абсолютной координате, вы также можете использовать класс ColumnText. Например: вы можете использовать статический метод showTextAligned(), который похож на тот, который вы использовали до сих пор. Преимущество метода ColumnText заключается в том, что он принимает объекты Phrase. Объект Phrase может состоять из разных объектов Chunk, и каждый Chunk может использовать свой шрифт разного размера. Пример, демонстрирующий предыдущий ответ, а также этот, см. По http://itextpdf.com/examples/iia.php?id=62

Другие вопросы по тегам