ITextPdf:从右到左打印阿拉伯字符串(RTL)

时间:2012-04-12 11:27:43

标签: 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与英文字符串一起使用,则会以其应有的格式正确显示。如果我使用带有混合英语和阿拉伯语字符的字符串,则会显示英语字符。

2 个答案:

答案 0 :(得分:3)

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

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

您也可以直接添加短语:

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

答案 1 :(得分:1)

非常感谢。 实际上问题是在RTL中切换时使用的字体表现不好。我在这个地址找到了很多非常有趣的unicode阿拉伯字体:http://cooltext.com/Fonts-Unicode-Arabic适用于任何感兴趣的人。

相关问题