我在eclipse中的PDF文件中插入UNICODE字符时遇到问题。 有一些解决方案,对我来说效率不高。
解决方案是这样的。
document.add(new Paragraph("Unicode: \u0418", new Font(bfComic, 12)));
我想从数据库中检索数据并将其显示给用户,我的字符是阿拉伯语脚本,有时是Farsi脚本。
您建议使用什么解决方案?
感谢
答案 0 :(得分:2)
您遇到了不同的问题:
数据编码:
请download chapter 2 of my book并转到标题为“短语对象:带领导的大块列表”的第2.2.2节。在本节中,查找标题“数据库编码与JVM使用的默认CharSet”。
您将看到数据库值的检索方式如下:
String name1 = new String(rs.getBytes("given_name"), "UTF-8");
那是因为数据库包含带有特殊字符的不同名称。如果您要检索这样的字段,则可能会将这些特殊字符显示为乱码:
String name2 = rs.getString("given_name")
字体编码:
您可以像这样创建字体:
Font font = new Font(bfComic, 12);
您没有展示如何创建bfComic
,但我认为此对象是使用BaseFont
作为编码的IDENTITY_H
对象。
从右向左书写/制作连字
虽然您的代码可以显示单个字符,但无法正确显示句子。
假设name1
是“Lawrence of Arabia”的阿拉伯语版本,我们想将此名称写为PDF。在以下屏幕截图中完成了三次:
第一行是错误的,因为字符的顺序错误。它们是从左到右书写的,而它们应该从右到左书写。当你这样做时会发生这种情况:
document.add(name1);
即使编码正确,您也会错误地渲染文本。
第二行也是错误的。字符现在按正确顺序排列,但没有连字:ل后跟و应合并为一个字形:لو
您只能通过将内容添加到ColumnText
或PdfPCell
对象,并将运行方向设置为PdfWriter.RUN_DIRECTION_RTL
来实现此目的。例如:
pdfCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
现在文本将正确呈现。
这在我的书的第11章中有解释。您可以在此处找到完整示例:Ligatures2