2

PDFCreator0.9.xによって生成されたPDFファイルのレンダリング中。文字マッピングにエラーが含まれていることに気づきました。さて、PDFファイルのエラーは何も不思議ではありません。Acrobatは欠陥のあるPDFファイルをレンダリングするのに不思議に思うので、多くのPDFジェネレーターはPDF標準に完全に準拠していないPDFを作成します。

小さなサンプルファイルを作成しようとしています:http://test.continuit.nl/temp/Document.pdf

単一のページは、Tjコマンドを使用して単一のグリフ(大文字のA)をレンダリングします(ストリーム5 0 objを参照)。選択したフォント(7 0 obj)には、単一のグリフが埋め込まれたフォントが含まれています。ここまでは順調ですね。charはchar#1によって参照されます。フォントのエンコーディングを考えると、相違点の部分が含まれています:[1/A]。したがって、char1->文字/A。埋め込まれたサブセットフォントには、文字65(大文字のAなど)のグリフに一致しないcmapがあります。フォントのcmapセクションは、PDFファイルの[フォント]->[エンコード]->[差分]配列の順序で文字を正確に定義します。

文字のマッピング/エンコードが2回行われているようです。PDFCreator0.9.xのファイルのみが影響を受けるようです。

私の質問は次のとおりです。これは正しいですか(または間違いを犯してPD​​Fは正しいですか)、レンダリングの問題を解決するためにこの状況を検出するにはどうしますか?

注:これらのPDFをレンダリングできる必要があります。

解決

ISO32000ファイルには、シンボリックTrueTypeフォント(フォント記述子のフラグビット3がオン)はエンコードが許可されていないため、常に単純な1on1エンコードを使用して無視する必要があるという記述があります。つまり、全体として、シンボリックフォントの場合は、Encodingオブジェクトを完全に無視します。これにより、問題が解決します。

4

1 に答える 1

2

最初のポイントは、ファイルがAcrobatで正しく開かれ、レンダリングされるため、ファイルが正しいことはほぼ確実です。実際、さまざまなPDFコンシューマーで正しく開いてレンダリングされるため、実際には正しいです。

問題のフォントはTrueTypeフォントであるため、実際には2種類の「エンコーディング」があります。まず、PDF/PostScriptエンコーディングがあります。これにより、文字コードがグリフ名にマップされます。あなたの場合、文字コード1をグリフ名/Aにマップします。

次に、PostScriptフォントで、CharStringsディクショナリで名前/ Aを検索します。これにより、文字の説明が得られ、それを実行します。ただし、TrueTypeフォントでは状況が異なります。

これは、1.7 PDFリファレンスマニュアルの430ページにあり、次のように記載されています。

「TrueTypeフォントプログラムの組み込みエンコーディングは、「cmap」と呼ばれる内部データ構造を使用して、文字コードからグリフ記述に直接マップします(セクション5.6.4「CMaps」で説明されているCMapと混同しないでください)。」

あなたの場合、CMAPサブテーブルで直接文字コード(0x01)を使用する必要があると思います。これにより、GIDは36になります。

于 2011-08-22T07:18:36.130 に答える