泰卢固语文本未显示在itext pdf Java中

dy1byipe  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(158)

我正在使用Java和Sping Boot 创建一个应用程序,我正在使用itext库生成一个pdf。这个pdf有泰卢固语和英语语言。但是,问题是英语正确地出现在PDF中,但来到泰卢固语语言,我得到空白,而不是泰卢固语文本。
我已经包含了字符. Unicode脚本.TELUGU基本字体.IDENTITY_H
但是什么都不起作用。所以,任何人请指导我解决这个问题。谢谢。
下面我附上代码请,检查.
1.代码
公共类PdfTelugu {

public void export(HttpServletRequest request, HttpServletResponse response, School school)    
                throws DocumentException, ParseException, java.io.IOException
{
    

    //Create Document
    Document doc  = new Document();
    
    //Pass 2 things ---> What to render & where to render
    PdfWriter instance2 = PdfWriter.getInstance(doc, response.getOutputStream());

    //Open the document to start the work
    doc.open();

    PdfPTable table = new PdfPTable(3);
    table.setWidthPercentage(100.0f);

    table.setWidths(new float[] {1.5f, 11.6f, 10.0f });
    Paragraph heading = new Paragraph();

    //Testing for Telugu Text

    Font font = FontFactory.getFont(FontFactory.defaultEncoding, 11, Font.NORMAL);

                PdfPCell c1 = new PdfPCell(new Phrase("1", font));
                c1.setVerticalAlignment(Element.ALIGN_CENTER);
                c1.setPaddingBottom(12f);
                //c1.setBorder(Rectangle.NO_BORDER);
                table.addCell(c1);

                c1 = new PdfPCell(new Phrase("పాఠశాల పేరు", font));
                c1.setVerticalAlignment(Element.ALIGN_CENTER);
                c1.setPaddingBottom(12f);
                //c1.setBorder(Rectangle.NO_BORDER);            
                table.addCell(c1);

                c1 = new PdfPCell(new Phrase("School Name",  font));
                c1.setVerticalAlignment(Element.ALIGN_CENTER);
                c1.setPaddingBottom(12f);
                //c1.setBorder(Rectangle.NO_BORDER);        
                table.addCell(c1);  

            //Here, Closing the document.
            doc.close();
            try {
                ServletOutputStream os = response.getOutputStream();
                os.flush();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
}

}

wqlqzqxt

wqlqzqxt1#

也许这不会解决你的问题,但它会帮助你诊断它。你的问题可能是由多种原因引起的。两个主要的原因是:
1.泰卢固语文本在传递到iText库之前损坏;
1.你的计算机可能没有泰卢固语真正类型字体安装所以iText库不知道什么打印.(或一些其他问题有关的iText库)
因此,为了找出哪一个尝试传递Unicodes序列表示您的泰卢固语文本,而不是实际的泰卢固语文本。

c1 = new PdfPCell(new Phrase("పాఠశాల పేరు", font));

与:

c1 = new PdfPCell(new Phrase("\\u0c2a\\u0c3e\\u0c20\\u0c36\\u0c3e\\u0c32\\u0020\\u0c2a\\u0c47\\u0c30\\u0c41", font));

只是为了明确表示字符串"పాఠశాల పేరు"的Unicode序列是\u0c2a\u0c3e\u0c20\u0c36\u0c3e\u0c32\u0020\u0c2a\u0c47\u0c30\u0c41如果问题仍然存在,它指出您的文本传递正确,iText库有一个问题,将其正确写入PDF。当我遇到这样的问题时,我发现我不需要在我的计算机上安装True Type字体。但是,如果传递Unicode序列解决了您的问题,这意味着您的泰卢固语文本在传递到iText库之前已损坏。
有很多方法可以将任何文本转换成Unicode序列。我使用了我自己的实用程序。如果你感兴趣-你可以使用我编写和维护的开源java库MgntUtils,它有一个实用程序可以将字符串转换成Unicode序列,反之亦然:

result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);

此代码的输出为:

\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World

该库可以在Maven CentralGithub中找到。它是maven工件,并带有源代码和javadoc
下面是类StringUnicodeEncoderDecoder的javadoc

相关问题