2012-04-12 4 views
3

Я использую ITextpdf для java, чтобы создавать штампованные PDF-файлы, иногда сгенерированный PDF-код на арабском языке, и я столкнулся с смешной проблемой. Чтобы создать арабскую страницу с Right To Left (RTL), я использую таблицы и ячейки, которые имеют свойство PdfPCell.setRunDirection (PdfWriter.RUN_DIRECTION_RTL). Когда я использую это свойство, арабский язык вообще не отображается, если я избегу вызова этого свойства. Арабские строки правильно показаны, это означает, что у меня не должно быть проблем с шрифтами, и я не знаю, действительно ли это проблема с IText или мной «Просто что-то не хватает.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 –

+0

использование шрифта ARIAL_FONT – shareef

ответ

3

Изменить код, чтобы включить зарегистрированный шрифт:

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

Также вы можете добавить фразу непосредственно:

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

Это IText 5 образцов. Что относительно itext 7. Как мы можем изменить направление в itext 7? –

+1

https://developers.itextpdf.com/examples/font-examples/clone-language-specific-examples – VahidN

+0

Я протестировал его, никаких изменений, я вижу текст слева направо с раздельными словами! –

1

Спасибо большое. На самом деле проблема заключалась в том, что шрифт, используемый при переключении в RTL, ведет себя плохо. Я нашел много очень интересных юбилейных арабских шрифтов по этому адресу: http://cooltext.com/Fonts-Unicode-Arabic для тех, кто заинтересован.

+0

Привет, вы можете мне помочь ?! Я хочу создать pdf-файл на арабском языке и не буду писать текст справа налево, а код выше арабского символа будет разделен и наоборот, также из LTR –