gpt4 book ai didi

java - iText unicode 字体问题

转载 作者:行者123 更新时间:2023-12-01 04:44:57 25 4
gpt4 key购买 nike

我一直在使用 itext (lowagie) sdk 在 java 中处理 ttf 字体。我想通过例子解释我的问题。

我有一个表格行,我想在其中显示一些文本(孟加拉语 ttf)。文本本来应该占 2 行,但实际上占了 3 行。问题是,第一行只显示 5 个单词,末尾有巨大的空白,视觉上看起来可以轻松容纳 8 个单词。

请注意,如果我使用英语,我就不会遇到这样的问题。我认为孟加拉语 unicode 是导致问题的原因。如果有任何关于该问题的练习那就太好了。

我通过示例重新解释我的问题:

Output:

Line1: AAA BBBB CCCC DDDD EEEE <BLANK SPACE BLANK SPACE>ENDOFLINE

Line2: CC DD EE PP QQ RR SS EE <BLANK SPACE BLANK SPACE>ENDOFLINE

Line3: CC DD EE PP QQ RR <BLANK SPACE BLANK SPACE>ENDOFLINE


Expected:

Line1: AAA BBBB CCCC DDDD EEEE CC DD EE PP #ENDOFLINE

Line2: QQ RR SS EE CC DD EE PP QQ RR #ENDOFLINE

源模块:

fontpath="D://Bangla.ttf";
this.banglaFont = BaseFont.createFont(fontpath,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);



PdfPTable bTable = new PdfPTable(1);
bTable.getDefaultCell().setBorder(1);
bTable.setWidthPercentage(100);
bTable.addCell(backTableRow1cell(28.5f, 8.8f, CardStr.GOVTNOTE_BNG));




public static PdfPCell backTableRow1cell(float hght, float fontSize, String txt) {
PdfPCell c1 = new PdfPCell();
c1.setFixedHeight(hght);
c1.setHorizontalAlignment(Element.ALIGN_RIGHT);
ITextUtil.setCellBorder(c1, 0, 0, 1, 0);
ITextUtil.setCellPadding(c1, 0, 7, 0, 0);
c1.addElement(TextProcessing.designPar(TextProcessing.getFontStyle(VoterCard.banglaFont, fontSize, Color.BLACK, Font.NORMAL), txt, Element.ALIGN_LEFT, 8, 2));
return c1;
}
public static Paragraph designPar(Font fnt, String txt, int alignment, int leading, int afterspacing) {
Paragraph phrs = new Paragraph(txt, fnt);
phrs.setLeading(leading);
phrs.setAlignment(alignment);
return phrs;
}

public static Font getFontStyle(BaseFont baseFont, float size, Color clr, int FontStyle) {
Font fnt = new Font(baseFont, size);
fnt.setColor(clr);
fnt.setStyle(FontStyle);

return fnt;
}

enter image description here

最佳答案

正如 Bruno 所说,印度语言尚不支持连字。因此,如果缩进确实成为必要,那么可以通过以下方式实现,因为我仅为此使用旧版本的 itext。

Say the text is: "আমার পথ চলা আমার পথে যেনো বেলা শেষে হারায় পথে আমার স্বপ্ন আমার সাথে থাকে স্বপ্নের ভিরে থাকে স্বপ্ন হয়ে রোদ্দুর খুঁজে পাই জীবনের"

And i want to show it in two line as:
আমার পথ চলা আমার পথে যেনো বেলা শেষে হারায় পথে আমার স্বপ্ন
আমার সাথে থাকে স্বপ্নের ভিরে থাকে স্বপ্ন হয়ে রোদ্দুর খুঁজে পাই জীবনের"

then I break it into 4 parts.
txt1="আমার পথ চলা আমার পথে যেনো বেলা শেষে হারায় পথে"
txt2=" আমার স্বপ্ন"
txt3="আমার সাথে থাকে স্বপ্নের ভিরে থাকে স্বপ্ন হয়ে রোদ্দুর খুঁজে"
txt4=" পাই জীবনের"




PdfPCell c1 = new PdfPCell();
c1.setFixedHeight(hght);
c1.setHorizontalAlignment(Element.ALIGN_RIGHT);
ITextUtil.setCellBorder(c1, 0, 0, 1, 0);
ITextUtil.setCellPadding(c1, 0, 7, 0, 0);




Paragraph phrs1 = new Paragraph(txt1, fnt);
phrs1.setLeading(12);
c1.addElement(phrs1);



Paragraph phrs2 = new Paragraph(txt2, fnt);
phrs2.setLeading(0);
c1.addElement(phrs2);


Paragraph phrs3 = new Paragraph(txt3, fnt);
phrs3.setLeading(11);
c1.addElement(phrs3);


Paragraph phrs4 = new Paragraph(txt4, fnt);
phrs4.setLeading(0);
c1.addElement(phrs4);

//请注意,您可能需要更改前导值进行调整,它适用于孟加拉语等印度语,不适用于英语

关于java - iText unicode 字体问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16013121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com