4

Java Web アプリケーションで iText (バージョン 5.4.0) を使用して PDF ドキュメントを作成しようとしていますが、フォントに問題があります。

Web アプリケーションは多言語対応であるため、ユーザーはさまざまな言語 (英語、フランス語、リトアニア語、中国語、日本語、アラビア語など) で情報をシステムに保存できます。

サンプルの日本語テキストを出力するように PDF を構成しようとしたときに表示されなかったので、公式の「iText in Action」ブックの例に従い始めました。私が遭遇した問題は、BaseFont.IDENTITY_H エンコーディングでフォントを構成しようとすると、次のエラーが発生することです。

java.nio.charset.UnsupportedCharsetException: Identity-H
    at java.nio.charset.Charset.forName(Charset.java:505)
    at com.itextpdf.text.pdf.PdfEncodings.convertToBytes(PdfEncodings.java:186)
    at com.itextpdf.text.pdf.Type1Font.<init>(Type1Font.java:276)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:692)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:615)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:450)

本の中にも、Google を検索しても、この問題について言及されていません。

私が見逃した可能性のあるものに関する提案はありますか?

4

2 に答える 2

3

2 人の Michael からの回答からおそらく理解できるように、標準の Type 1 フォント Times Roman とIDENTITY_H互換性があるという誤った仮定をしました。を使用する場合はフォントを変更するIDENTITY_Hか、標準の Type 1 フォントを使用する場合はエンコーディングを変更する必要があります (この場合BaseFont.EMBEDDED、標準の Type 1 フォントは埋め込まれていないため、使用しても意味がありません)。私の本でこれについて言及していなかったら申し訳ありません。些細なことだと思いました。私が複合フォントについて書いたことからそれを推測することができます。

于 2013-03-26T15:17:41.273 に答える
1

フォントの埋め込みを使用して、すべての言語で機能する 1 つのエンコーディングはないと思います。たとえば、フォント埋め込みを true に設定して UTF-8 エンコーディングを選択すると、フォントが埋め込まれますが、そうではありません。

事前にテキストの言語がわからないため、これを行う必要があることに気付きました。

try {
  // Try to embed the font.
  // This doesn't work for type 1 fonts.
  return FontFactory.getFont(fontFace, BaseFont.IDENTITY_H, 
      true, fontSize, fontStyle, textColor);
} catch (ExceptionConverter e) {
  return FontFactory.getFont(fontFace, "UTF-8", true, 
      fontSize, fontStyle, textColor);
}

(古いバージョンの iText -- 2.1 を使用しているため、例外クラスは異なる場合があります。)

多くの iText のものと同様に、これは文書化されておらず、簡単なものが不必要に難しくなっています。

于 2013-11-28T04:59:39.383 に答える