4

我在 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英文字符串,它会以应有的格式正确显示。如果我使用混合了英文和阿拉伯字符的字符串,只会显示英文字符。

4

2 回答 2

6

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

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

您也可以直接添加短语:

PdfPCell pdfCell = new PdfPCell(new Phrase("آزمايش", font));  
pdfCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
于 2012-04-15T19:50:08.103 回答
1

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

于 2012-04-17T15:14:52.457 回答