2013-04-15 62 views
1

我一直在使用itext(lowagie)sdk在java中使用ttf字体。我想通过示例来解释我的问题。iText unicode字体问题

我有一个表格行,我想显示一些文本(孟加拉语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

+0

请提供自包含的源代码和样本PDF 。 – mkl

+0

嗨@mkl我已经添加了代码段和一个截图,我没有看到PDF附件选项在这里! –

+0

您的getFontStyle()方法不起作用。样式已经由baseFont对象定义;你不能改变它。我认为孟加拉语需要连字。目前这仅支持阿拉伯语,不支持印度语。 CardStr.GOVTNOTE_BNG的价值是多少?也许它包含非空白字符而不是普通空格。其他许多事情都可能是错误的,但没有一个能够再现问题的样本,没有人能够帮助你。你正在使用我的名字(lowagie)的类。该版本已过时:http://lowagie.com/itext2也许您正面临一个已经修复的错误。 –

回答

0

布鲁诺说,连字都不支持印度语呢。所以,如果indentation真的成为必需,那么可以通过以下方式实现缩进,因为我只使用旧版本的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); 

//请注意,您可能需要改变超前值来调节,它是为印度语言一样孟加拉语,而不是英语