我正在使用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();
}
}
}
1条答案
按热度按时间wqlqzqxt1#
也许这不会解决你的问题,但它会帮助你诊断它。你的问题可能是由多种原因引起的。两个主要的原因是:
1.泰卢固语文本在传递到iText库之前损坏;
1.你的计算机可能没有泰卢固语真正类型字体安装所以iText库不知道什么打印.(或一些其他问题有关的iText库)
因此,为了找出哪一个尝试传递Unicodes序列表示您的泰卢固语文本,而不是实际的泰卢固语文本。
与:
只是为了明确表示字符串
"పాఠశాల పేరు"
的Unicode序列是\u0c2a\u0c3e\u0c20\u0c36\u0c3e\u0c32\u0020\u0c2a\u0c47\u0c30\u0c41
如果问题仍然存在,它指出您的文本传递正确,iText库有一个问题,将其正确写入PDF。当我遇到这样的问题时,我发现我不需要在我的计算机上安装True Type字体。但是,如果传递Unicode序列解决了您的问题,这意味着您的泰卢固语文本在传递到iText库之前已损坏。有很多方法可以将任何文本转换成Unicode序列。我使用了我自己的实用程序。如果你感兴趣-你可以使用我编写和维护的开源java库MgntUtils,它有一个实用程序可以将字符串转换成Unicode序列,反之亦然:
此代码的输出为:
该库可以在Maven Central或Github中找到。它是maven工件,并带有源代码和javadoc
下面是类StringUnicodeEncoderDecoder的javadoc