4

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

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 アラビア語フォントをたくさん見つけました。

于 2012-04-17T15:14:52.457 に答える