4

私の以前の質問のフォローアップとして、CGPDF* 関数を使用して PDF ファイルからテキストを抽出しようとすると、次のようになります。

CGPDFStringRef pdfString

次のような文字コードの配列に変換できることがわかりました。

const unsigned char *characterCodes = CGPDFStringGetBytePtr(pdfString);

今、私が抽出しようとしているテキストは、PDF自体にエンコードされていない14のタイプ1ベースフォントの1つで書かれています。そのため、そのフォントに関連する AFM ファイルを解析して、文字コードからグリフ名へのマッピングと、次のような寸法を取得しました。

C 61 ; WX 600 ; N equal ; B 80 138 520 376 ;
C 63 ; WX 600 ; N question ; B 129 -15 492 572 ;
C 64 ; WX 600 ; N at ; B 77 -15 533 622 ;
C 65 ; WX 600 ; N A ; B 3 0 597 562 ;
C 66 ; WX 600 ; N B ; B 43 0 559 562 ;

私の質問は、文字コードを知っているということです。「61」 、グリフ名「等しい」からNSString @"="にするにはどうすればよいですか。特に、その文字コードが別のグリフ名に再マップされた場合、たとえば、PDF のフォント エンコーディング オプションによって「質問」のようになります。

以前の質問: iOS PDF 解析タイプ 1 フォント メトリックiOS PDF からプレーン テキスト パーサー

4

1 に答える 1

2

私はこれをテストしていませんが、これにはAdob​​e Glyph Naming Conventionを使用する必要があるようです:

Adobe Glyph Naming Convention の目的は、一連のグリフからの Unicode 文字列の計算をサポートすることです。これは、グリフ名から文字列へのマッピングを指定することによって実現されます。

そのページにリンクされているglyphlist.txtは、あなたの問題に関連しているようです。
サンプルフラグメント:

...
イプシロン;03B5 イプシロン
トノス;03AD
イコール;003D イコールモノ
スペース;FF1Dイコール
スモール;FE66 イコール
スーペリア;207C
...

あとは、それらの Unicode 値を NSString インスタンスに入れるだけです。

編集:
上記の情報を確認したところ、Adobe の PDF 参照ドキュメント セクション 5.9 - テキスト コンテンツの抽出 に次の説明が見つかりまし

フォントが、事前定義されたエンコーディング MacRomanEncoding、MacExpertEncoding、または WinAnsiEncoding のいずれかを使用する単純なフォントであるか、アドビ標準ラテン文字セットから取得された文字名と Symbol.フォント (付録 D を参照):

  1. 996 ページの表 D.1 およびフォントの Differences 配列に従って、文字コードを文字名にマップします。
  2. 対応する Unicode 値を取得するには、Adobe Glyph List (参考文献を参照) で文字名を調べます。
于 2012-10-15T14:07:33.527 に答える