スタンプされた PDF を生成するために Java で iTextpdf を使用します。生成された 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
と、本来あるべき形式で正しく表示されます。英語とアラビア語の文字が混在する文字列を使用すると、英語の文字だけが表示されます。