Я использую 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 и жирным шрифтом. Но нет никакой разницы в весе глифа для обеих строк. Почему это происходит? Есть ли исправление для этого?