java - ITextPdf : Printing Arabic strings from Right To Left (RTL)

标签 java itext pdf-generation arabic right-to-left

我在 java 上使用 iTextpdf 来生成带图章的 PDF,有时生成的 PDF 是阿拉伯语,我遇到了一个有趣的问题。 为了让阿拉伯语页面从右到左 (RTL) 创建,我使用具有属性 PdfPCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL) 的表格和单元格。当我使用此属性时,阿拉伯语根本不显示,如果我避免调用此属性,阿拉伯语字符串会正确显示,这意味着我不应该遇到字体问题,而且我真的不知道这是否是 iText 的问题或者我只是错过了一些东西。

这里有一小段代码可以正确显示阿拉伯字符串:

BaseFont bf = BaseFont.createFont(Application.getBASEPATH() + "fonts/arabic.ttf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font trebuchetSmaller = new Font(bf, 10, 0);

PdfPTable tbl = new PdfPTable(1); 
PdfPCell cell = new PdfPCell();
Paragraph paragraph = new Paragraph();
paragraph.add(new Phrase("ربط صفحة على شبكة الإنترنت"), trebuchetSmaller));
cell.addElement(paragraph);
tbl.addCell(cell);

此处需要进行更改,使阿拉伯字符串消失:

BaseFont bf = BaseFont.createFont(Application.getBASEPATH() + "fonts/arabic.ttf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font trebuchetSmaller = new Font(bf, 10, 0);

PdfPTable tbl = new PdfPTable(1); 
PdfPCell cell = new PdfPCell();
cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
Paragraph paragraph = new Paragraph();
paragraph.add(new Phrase("ربط صفحة على شبكة الإنترنت"), trebuchetSmaller));
cell.addElement(paragraph);
tbl.addCell(cell);

如果我将 PdfWriter.RUN_DIRECTION_RTL 与英文字符串一起使用,它会以应有的格式正确显示。如果我使用混合了英语和阿拉伯语字符的字符串,则只显示英语字符。

最佳答案

更改您的代码以包含注册的字体:

new Phrase("آزمايش", font)

也可以直接添加短语:

PdfPCell pdfCell = new PdfPCell(new Phrase("آزمايش", font));  
pdfCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 

关于java - ITextPdf : Printing Arabic strings from Right To Left (RTL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122610/

相关文章:

java - 发生 ClassCastException 但没有任何正确的详细信息

java - 计数时数组越界[正确]

Java加密等于不起作用

java - 正则表达式程序

java - Play Framework 中使用 Itext 而不是 PDF 模块将 HTML 转换为 PDF

c# - 仅在使用 iTextSharp 的生产中出现 "The document is not open"错误

java - Action 类的范围可以限定为 Singleton 吗?

java - iText 和 HTML 标签

python - Reportlab - 如果段落对于一行来说太长,如何引入换行符

javascript - 在pdfmake中制作子列(一组具有相同标题的列)