PDF コンテンツを GDI デバイス コンテキスト (正確には 24 ビット ビットマップ) にレンダリングしようとしています。PDF ストリームを PDF オブジェクトに解析し、コンテンツ ディクショナリから PDF コマンドをレンダリングすることは、フォント レンダリングを含め、うまく機能します。
埋め込まれたフォントは、FontFile ストリームから解凍され、 を使用して「ロード」されAddFontMemResourceEx
ます。現在、一部の埋め込みフォントは、'name' テーブルなど、GDI が必要とする一部の TrueType テーブルを削除しています。このため、TrueType サブセット フォントをテーブルに解析してフォントを変更し、データが欠落している/欠落しているテーブルをできるだけ正しい情報で再生成するように変更しようとしました。
Microsoft Font Validatorツールを使用して、生成されたフォントがどの程度「正しい」かを確認します。maxp テーブルの場合、通常、最大値が大きすぎる (サブセットである) か、xAvgCharWidth
フィールドが「OS/2」テーブルの計算値と等しくないなど、いくつかのエラーが発生しますが、これは停止しません。他の埋め込みフォントを使用できるようにします。PDFCreator を使用して埋め込まれたフォントは、問題のあるものです。
質問:
- GDI がフォント ファイルを使用できるようにするために、フォント ファイルに何を変更する必要があるかを判断するにはどうすればよいですか?
- フォントファイルのまだ何が問題なのかを知ることができる他のフォント検証ツールはありますか?
必要に応じて、元のフォント ファイルと変更したフォント ファイルをどこかにダウンロードできるようにします。
これまでに行った変更:
- 「head」、「hhea」、「maxp」、および「OS/2」セクションがあることを確認してください。
- シンボル フォントがある場合は、「OS/2」セクションの Panose フィールドと Unicode フィールドをクリアします。
- WInAscent/Desc と TypoAsc/Desc がゼロの場合は、正しい値を入力してください。
- 上/下付き/下線の位置とサイズの許容値を入力します。
- 残っているすべてのグリフをスキャンして、head に X/Y の最小値/最大値を入力します。
- 名前セクションを元の PDF ファイルの情報で再構築します。