2012-04-12 139 views
3

为了生成加盖的PDF,我使用java上的ITextpdf,有时生成的PDF格式是阿拉伯语,我面临一个有趣的问题。 要让从右到左(RTL)创建的阿拉伯文页面使用具有属性PdfPCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL)的表和单元格。当我使用这个属性时,阿拉伯文根本不显示,如果我避免了对这个属性的调用,阿拉伯文字符串被正确显示,这意味着我不应该有字体问题,我真的不知道这是否是IText或I问题我只是想念一些东西。ITextPdf:从右到左(RTL)打印阿拉伯文字符串

这一小段代码的和平,显示正确的阿拉伯语字符串:

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

+0

您可以使用Spannabe。 [有关于它的详细信息] [1] [1]:http://stackoverflow.com/a/11612380/1278748 – 2012-11-25 17:00:38

+0

使用字体ARIAL_FONT – shareef 2012-12-19 11:55:16

回答

3

更改您的代码,包括已注册的字体:

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

您也可以直接添加词组:

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

这是iText的5样品。 itext怎么样7.我们如何改变itext 7中的方向? – 2018-01-10 06:10:50

+1

https://developers.itextpdf.com/examples/font-examples/clone-language-specific-examples – VahidN 2018-01-10 10:52:01

+0

我测试过了,没有变化,我看到我的文字从左向右分开的单词! – 2018-01-10 12:32:34

1

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

+0

嗨,您能帮我吗?!我想创建一个阿拉伯文pdf,并且不会让文本从右到左开始,而阿拉伯字符以上的代码是分开的,反之亦然,从LTR – 2018-03-05 19:08:56