Для размера шрифта 8 строка, нарисованная с использованием TextLayout (iText5), не выделяется жирным шрифтом - PullRequest
0 голосов
/ 09 марта 2020

Я использую PdfContentByte TextLayout и Attributed Text для рисования глифов регионального текста. Теперь для шрифта размером 9 или больше 9 глифы становятся жирными. Но для размера 8 и меньше 8 обычная и жирная строка выглядит одинаково. Я отладил свойства шрифтов и атрибутивного текста. Все настроено правильно, но при отрисовке оба нарисованных глифа одинаковы. Я не могу найти решение для этого нигде.

public class Mangal {
    public static void main(String[] args) throws DocumentException, IOException {

        Document document = new Document();

        PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("C:\\Users\\onkar.sagar\\Downloads\\pdf1.pdf"));
        document.open();

        String str= "हालांकि हिन्दू पंचांग के अनुसार नया साल 1 जनवरी से शुरू नहीं होता। \n हालांकि हिन्दू पंचांग के अनुसार नया साल 1 जनवरी से शुरू नहीं होता।";
        AttributedString txt=new AttributedString(str);
        LineBreakMeasurer lineMeasurer=null;
        BaseFont bf = BaseFont.createFont("C:\\Users\\onkar.sagar\\Downloads\\Mangal Regular\\Mangal Regular.ttf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        java.awt.Font font = new java.awt.Font("Mangal",java.awt.Font.PLAIN, 8);
        txt.addAttribute(TextAttribute.FONT, font,0,66);
        txt.addAttribute(TextAttribute.FOREGROUND, Color.RED,0,66);
        font= new java.awt.Font("Mangal",java.awt.Font.BOLD, 8);
        txt.addAttribute(TextAttribute.FONT, font, 67, 135);
        txt.addAttribute(TextAttribute.FOREGROUND, Color.BLUE,67,135);
        float width=500f;
        float height=800f;

        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate tp = cb.createTemplate(368f, height);
        Graphics2D g2 = tp.createGraphicsShapes(368f, height);      
        g2=paint(g2,lineMeasurer,txt,368f);
        g2.dispose();
        cb.addTemplate(tp, 50, -300);
        document.close();
    }

    public static Graphics2D  paint (Graphics2D g2, LineBreakMeasurer lineMeasurer, AttributedString txt, float breakWidth) {
        int paraStart=0;
        int paraEnd=0;
        if(lineMeasurer == null) {
            AttributedCharacterIterator para = txt.getIterator();
            paraStart = para.getBeginIndex();
            paraEnd = para.getEndIndex();
            FontRenderContext frc = g2.getFontRenderContext();
            lineMeasurer = new LineBreakMeasurer(para, frc);
        }
        float drawPos =0;
        lineMeasurer.setPosition(paraStart);
        int i=1;
        while(lineMeasurer.getPosition()<paraEnd) {
            TextLayout layout = lineMeasurer.nextLayout(breakWidth);
            if(lineMeasurer.getPosition()==paraEnd) {

            }else {
                layout=layout.getJustifiedLayout(breakWidth);
            }

            drawPos +=layout.getAscent();
            layout.draw(g2, 20, drawPos);
            drawPos += layout.getDescent() + layout.getLeading();
        }
        return g2;
    }
}

Выходные данные

Как видно, шрифт с красной строкой имеет размер 8 и является ОБЫЧНЫМ. И синяя строка прикреплена с размером шрифта 8 и жирным шрифтом. Но нет никакой разницы в весе глифа для обеих строк. Почему это происходит? Есть ли исправление для этого?

...