编码错误:
在源代码中使用非 ASCII 字符是一种不好的编程习惯。例如,你有"الموقع الإلكتروني"
. This String
应被解释为双字节 UNICODE 字符。然而,当你save使用与 UNICODE 不同的编码的源代码文件,或者当您compile该代码使用不同的编码,或者当your JVM使用不同的编码每个双字节字符都有被损坏的风险,从而导致乱码,例如"الموقع الإلكتروني"
如何解决这个问题?使用 UNICODE 表示法:"\u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a"
请查阅官方文档、免费电子书StackOverflow 上最好的 iText 问题 http://pages.itextpdf.com/ebook-stackoverflow-questions.html,您会发现这个问题已经在这里描述过:生成 PDF 时无法获取捷克语字符 https://stackoverflow.com/questions/26631815/cant-get-czech-characters-while-generating-a-pdf
字体错误:
如果您仔细阅读本书,您会发现您的示例可能无法运行,因为您可能使用了错误的字体。我在这个问题的回答中对此进行了解释:使用 iText 将阿拉伯字符从 html 内容转换为 pdf https://stackoverflow.com/questions/30214147/arabic-characters-from-html-content-to-pdf-using-itext
你假设arialbd.ttf
可以产生阿拉伯字形。据我所知仅arialuni.ttf
支持阿拉伯语。
错误的做法:
此外,您忽略了这样一个事实,即您只能在上下文中使用阿拉伯语ColumnText
和PdfPCell
目的。这里解释一下:如何使用 Eclipse 在 pdf 中创建波斯语内容 https://stackoverflow.com/questions/26818555/how-to-create-persian-content-in-pdf-using-eclipse
例如:
BaseFont bf = BaseFont.createFont(
"c:/windows/fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bf, 20);
ColumnText column = new ColumnText(writer.getDirectContent());
column.setSimpleColumn(36, 730, 569, 36);
column.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
column.addElement(new Paragraph(
"\u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a", font));
column.go();
请注意,我正在使用Identity-H
编码,因为涉及UNICODE。