をLigatures2例を見てみてください。
あなたはこの行を忘れていません。あなたはiTextのは左し、必要に応じて合字を作成するには、右からテキストを書きたいとき
cb.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
setRunDirection()
方法が必要です。このメソッドは、オブジェクトの代わりにPdfPCell
オブジェクトに適用する場合のテーブルのコンテキストにも存在します。
また、私はなぜこれを使用するのかわかりませんString
:"السعر الاجمالي: "
。あなたのようなString
を使用すると、エンコードと合字に関するすべての種類の混乱が生じる可能性があるため、代わりにUnicode表記を使用してください("\u0644\u0648\u0631\u0627\u0646\u0633 \u0627\u0644\u0639\u0631\u0628"
など)。一部のエディタでは正しいエンコーディングを使用しません(テキストをぎこちないものに変更する)。一部のエディタは合字を作成します(これはiTextが期待するものではありません)。例えば
は、あなたのケースでは、私はアラビア語を知らないので、それは"\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0627\u062c\u0645\u0627\u0644\u064a"
または"\u064a\u0644\u0627\u0645\u062c\u0627\u0644\u0627 \u0631\u0639\u0633\u0644\u0627"
だ場合、私は知らない私は値\u0627
またはでグリフで読むために開始する必要がある場合、私は知らないので、値が\u064a
のグリフ。いずれにせよ、iTextはString
の最初の "文字"が人間によって読み取られる最初のものであると考えている。
ArabicExampleの例を見てみてください。
をdocument.add()
を使用しているときRTLやアラビア語の合字がサポートされているので、最初の行は、間違っています。 2行目は正しいです(私が知る限り:私はアラビア語を読むことができません)。私はColumnText
を使用しています。
これは私が使用するコードです:
public static final String FONT = "resources/fonts/NotoNaskhArabic-Regular.ttf";
public static final String ARABIC = "\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0627\u062c\u0645\u0627\u0644\u064a";
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Font f = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Phrase p = new Phrase("This is incorrect: ");
p.add(new Chunk(ARABIC, f));
p.add(new Chunk(": 50.00 USD"));
document.add(p);
p = new Phrase("This is correct: ");
p.add(new Chunk(ARABIC, f));
p.add(new Phrase(": 50.00"));
ColumnText canvas = new ColumnText(writer.getDirectContent());
canvas.setSimpleColumn(36, 750, 559, 780);
canvas.setRunDirection(PdfWriter.RUN_DIRECTION_LTR);
canvas.addElement(p);
canvas.go();
document.close();
}
(Paragraph
がPhrase
を拡張する)私はPhrase
を使用しますが、Paragraph
を使用しているときに、同じ結果を期待することができます。これがあなたの質問に答えることができない場合は、明確にしてください。 StackOverflowのほとんどの人はアラビア語を理解していないので、質問をするときや「うまくいきません」と明示する必要があります。私たちはアラビア語を知らないので、どのように動作するはずです。
私はすでにテーブルを作っており、セル(cell.setRunDirection)をカスタマイズしてアラビア語を書いています。しかし、上記の場合はカスタマイズできません(cb)。 @ブルノ –
あなたのコメントは、問題が解決されたことを意味しますか?私は 'PdfPCell'のために' setRunDirection() 'メソッドも存在するという発言を追加して私の答えを更新します。それがあなたのために働くなら、答えを受け入れてください。 –
いいえ、それは私が尋ねる前にしたことでした。私は私がpdfにアラビア語を入力することができるということを意味しますが、私がpdfの一部にしなければならない問題は、アラビア語でサポートされているテーブルと他の部分はページの他のテキストです。この質問 –