この章では、中国語またはCJK(Chinese / Japan / Koera)などの他の非ASCII文字をitex7に表示する方法と、font-asian.jarパッケージの機能を解釈する方法について説明します。
フォントエンコーディング
フォントがコンピュータにどのように保存されているか、フォントファイルとは何か、エンコーディングの問題を本当に理解したい場合は、中国語のエンコーディングTTFフォント間の関係を参照できます。
ちなみに、マシンのデフォルトのコードページ(つまり、ANSI)を確認してください。、cmdにchcpと入力して、コードページ番号を表示します
PDFのCJKフォント
市場には3つの人気のあるフォントがあると結論付けることができます。
- Postscript / Type1は、1985年にAdobeによって提案されたベクターフォント標準のセットです。CJKフォントが著作権で保護され、課金され、CJKフォントが拡張されると、CIDキー付きフォントテクノロジが使用されます。itex7で使用するのはより面倒です。はい、多くのことがあります。
- Truetype TrueTypeは、1991年にAppleとMicrosoftが共同で提案した別のベクターフォント標準のセットです。
- OpenType 995年、AdobeとMicrosoftは、Type1およびTrueTypeと互換性があり、真にUnicodeをサポートするフォントの共同開発を開始しました。その後、リリースされたときに、正式にOpenTypeと名付けられました。OpenTypeはType1とTrueTypeを埋め込むことができるので、画面に表示するか印刷するかにかかわらず、両方の特性を備えており、品質は非常に優れています。
CJKフォントをPDFに埋め込みたい場合、使用しているitex7またはその他のAdobe以外のソフトウェアは、ライセンス保護のためにCJKをPDFに埋め込むことができません。詳細については、font-asian-7.xxjarのcmap_infoを参照してください。 txt情報:
ここでは、主にcmap_info.txtのコンテンツを翻訳して要約します(その中の一部のURLが古くなっているため、オンラインで見つけた情報の一部を要約します)。
- CJKまたはCEフォントの著作権はAdobeに帰属し、AdobeReaderなどのソフトウェアでのみ使用できます。
- iText7は、Adobeの著作権を侵害しているため、CJKまたはCEフォントを埋め込むことはできません。たとえば、CJKフォントを埋め込むと、他のPDFビューアで表示できるため、その関心に影響します。
- font-asian.jarには2種類のファイルがあります。1つはcmapファイル(エンコードファイル)で、もう1つは.propertiesファイル(フォントプログラムに関連)です。
- タイプ1フォントのフォントメトリックを記述するために使用されるフォントメトリックは、Adobeフォントメトリック(AFM)およびAdobe複合フォントメトリック(ACFM)ファイルに格納されます。これらのファイルは、フォントプログラムによって使用されます。これらをitexに配置します。情報は.propertiesファイルに保存され、key-valueの形式で保存されるため、実際のフォントプログラムは必要ありません。フォント情報は、itexによって作成されたファイルに配置するだけです。
itext7埋め込みフォント
タイプ1フォントを作成する
上の図のcmapを展開すると、いくつかのフォントプログラムが見つかります(.propertiesファイル名はフォントプログラムの名前を表します)。もちろん、フォントプログラムでサポートされているエンコーディングも決定する必要があります。以下は、一般的に使用されるフォントプログラムとAdobeの対応するエンコーディングです。 :
フォントプログラム | コーディング |
---|---|
STSong-Light | UniGB-UCS2-H |
MHei-中 | UniCNS-UCS2-H |
MSung-Light | UniCNS-UCS2-H |
HeiseiKakuGo-W5 | UniJIS-UCS2-H |
HeiseiMin-W3 | UniJIS-UCS2-H |
HYGoThic-中 | UniKS-UCS2-H |
HYSMyeongJo-中 | UniKS-UCS2-H |
他のフォントプログラムに対応するコードは一時的に利用できず、adobe公式サイトの情報が異なります。特定のフォントを使用したい場合は、その時点でチェックできます。
次に、特定のフォントを作成します。コアコードは次のとおりです。STSong-Lightを使用してフォントを作成するとします。
......
PdfFont f2 = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H",true);
document.add(new Paragraph("hellos你好").setFont(f2)); //表格、list其他方式也是这种方式
......
itext5を使用したことがある場合は、フォントの作成方法がitex5とは異なることがわかります。問題ありません。別の記事を作成して、フォントを作成する際のitex7とitex5の違いについて説明します。
pdfを作成した後、図に示すように、crtl + dを押してフォントのプロパティを確認します。
実際のフォントはAdobeSongStd-Lightであることがわかります。これは、このマシンにインストールしたときに簡易中国語を選択したためです。SongTiとHei Tiのフォントプログラムは、「C:\ Program Files(x86)\ Adobe \」に含まれています。 Acrobat Reader DC \ Resource \ CIDFont "(インストールディレクトリ)で、CIDフォントを使用していることがわかります。また、2つのフォントプログラムがあります。
このフォルダにないフォントプログラムを使用するとどうなりますか?たとえば、HeiseiKakuGo-W5などでは、itex7を使用してファイルを作成できますが、pdfを開くと、このようなダイアログボックスが表示されるので、図に示すようにフォントをダウンロードします。
他のフォントを作成する
他のフォントを埋め込む方が簡単です。独自に定義したフォントファイルを使用したり、ttfファイルをサポートしたり、Windowsに付属のフォントファイルを使用したりできます。次のコードを使用します。
PdfFont f2 = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H",true);
PdfFont f3 = PdfFontFactory.createFont("C:/Windows/Fonts/simhei.ttf", PdfEncodings.IDENTITY_H,true);
//Add paragraph to the document
document.add(new Paragraph("hellos你好").setFont(f2));
document.add(new Paragraph("hellos你好").setFont(f3));
表示効果は次のとおりです。
PdfEncodings.IDENTITY_HはUnicodeエンコーディングです。通常、ttfファイルはこのエンコーディングを使用します。これについては後で詳しく説明します。