14

iText、PDFBox、およびOracle Formsを試しました。また、iText の場合、グジャラート語の PDF ドキュメントを生成することにも成功しました。しかし、残念ながら、グジャラート語 (UTF-8) 言語で適切なフォントを生成していません。

私のプロジェクトは jdk 1.4 であり、使用が必須です。そのため、グジャラート フォントをサポートする古いバージョンの API が必要です。

利用可能なオプションがあれば提案してください。

サンプルコード:

public void GeneratePDFusingiText(String lStrGujaratidata)
  {
    try
    {

      BaseFont bf = BaseFont.createFont("C:\\Windows\\Fonts\\Shruti.ttf",  BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
      Font font = new Font(bf, 12);
      Document document = new Document();
      PdfWriter.getInstance(document, new FileOutputStream("D:/GeneratePDFusingiText.pdf"));
      document.open();
      document.add(new Paragraph(lStrGujaratidata, font));
      document.close();
    }
    catch(Exception e)
    {
      System.out.println("Exception while generating PDF");
      e.printStackTrace();
    }
   } 

編集1:

画像が表示されていない可能性があります。こちらにアップされています。

編集2:

フォント例のイメージ

ステップ 1)グジャラート語の文字列 Google Transliterate を入力します。

Step-2) BableMap Software を使用して Unicode に変換し、Resourse Bundle を使用して使用します。

問題:文字列を持たせてください: બિલાડી (Biladi)

ユニコードは次のようになります: \u0AAC \u0ABF \u0AB2\u0ABE\u0AA1\u0AC0

上記の太字の Unicode 文字を確認してください。それが私が問題を抱えているところです。このユニコードを\u0ABF \u0AAC\u0AB2\u0ABE\u0AA1\u0AC0 に変更すると、適切な出力が PDF に出力されます。

同時に、HTML で間違った出力を出力します: િબલાડી

私はそれらの間を管理する必要があります。

「gu」と「gu.UTF-8」と「UTF-8」を使ってみました。しかし、毎回同じ出力が得られます。

4

1 に答える 1

1

更新された回答

あなたのコメントの後、私は間違っていたことに気付きました。つまり、ダイアクリティカル文字、メイン文字の左側にレンダリングする必要がありますが、バイト シーケンスの 2 番目に表示する必要があります。

つまり、iText はインド文字セットでのこのタイプのレンダリングをサポートしていないことがわかりました。大まかに言えば、iText は awtGraphics2Dを使用して、ラテン文字以外の Unicode 文字を PDF 内の画像として 1 つずつレンダリングします。(これは、適切なフォントがすべてのコンピューターにインストールされているとは限らないためだと思います)。この機能では、この特別な順序は考慮されていません。

iText は、別の開発者によって提供されたクラスを使用して、アラビア語の同様の動作をサポートしています。com.itextpdf.text.pdf.ArabicLigaturizerを参照してください。おそらく、同様のものを自分で作成できますか?(!)

これは以前に出てきたようです:

元の回答

ケム・チョー

iText は正しい文字を表示していると思いますが、文字列を Unicode ポイントに変換する前に、入力の最初の 2 文字が「反転」されています。そのため、データが iText に到達する前に問題が発生しました。

根本的な問題は、「最初の」文字がDiacriticのタイプである「プレベース」文字であることです。単独では存在できず、その目的は別の文字を装飾することであるという点で、ヨーロッパのテキストの「アクセント」に少し似ています。この場合、「バ」(બ) が「ビ」に変わります。

Unicode コードページを見ると、最初の文字 (િ) は確かにコードポイント \u0ABF であり、2 番目の文字 (બ) は \u0AAC です: http://en.wikipedia.org/wiki/Gujar%C4%81ti_script #ユニコード

そのため、Google Transliterate とコードポイント表現の間のどこかで、これらの文字が反転しました。そのため、その翻訳をどのように行ったかを確認する必要があります。

これらの文字をどのようにコードポイントに変換しましたか?

一部の通訳者は、主子音の前ではなく、後に「プレベース」を配置します。

  • これらの文字を (Linux) 端末に貼り付けると、最初の 2 文字が前後に表示されることに注意してください。あなたにも似たようなことがあったと思います。
  • また、Google Transliterate でこの単語を編集しようとすると、カーソルを最初の 2 文字の間に置くことができず、バックスペースを押すと、左の文字が右の文字の前に削除されることに気付くでしょう。

したがって、この「反転」が発生した場所を突き止めることができれば、解決策が提示されることを願っています。

お役に立てれば

于 2012-05-13T13:55:49.440 に答える