如何使用eclipse在pdf中创建波斯语内容

时间:2014-11-08 15:13:30

标签: java eclipse pdf itext

我在eclipse中的PDF文件中插入UNICODE字符时遇到问题。 有一些解决方案,对我来说效率不高。

解决方案是这样的。

document.add(new Paragraph("Unicode: \u0418", new Font(bfComic, 12)));

我想从数据库中检索数据并将其显示给用户,我的字符是阿拉伯语脚本,有时是Farsi脚本。

您建议使用什么解决方案?

感谢

1 个答案:

答案 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。在以下屏幕截图中完成了三次:

enter image description here

第一行是错误的,因为字符的顺序错误。它们是从左到右书写的,而它们应该从右到左书写。当你这样做时会发生这种情况:

document.add(name1);

即使编码正确,您也会错误地渲染文本。

第二行也是错误的。字符现在按正确顺序排列,但没有连字:ل后跟و应合并为一个字形:لو

您只能通过将内容添加到ColumnTextPdfPCell对象,并将运行方向设置为PdfWriter.RUN_DIRECTION_RTL来实现此目的。例如:

pdfCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);

现在文本将正确呈现。

这在我的书的第11章中有解释。您可以在此处找到完整示例:Ligatures2