2

peepdfを使用して、2 つの単純な pdf ファイルを分析しています。どちらのファイルも 1 行のテキスト (「ZYXWVUTSRQQRSTUVWXYZ」) を含み、Mac OS X で作成されました。

最初のファイルは TextEdit で作成されました。ストリームは 3 つしかなく、最初のストリーム (peepdf で自動的にデコードされます) を見ると、テキストがはっきりとわかります。

PPDF> stream 4

q Q q 72 707.272 468 12.72803 re W n /Cs1 cs 0 sc q 0.9790795 0 0 -0.9790795 72 720
cm BT 0.0001 Tc 11 0 0 -11 5 10 Tm /TT1 1 Tf (ZYXWVUTSRQQRSTUVWXYZ) Tj ET
Q Q

2 番目のファイルは MS Word で作成されました。4 つのストリームがありますが、デコードされたテキストはどこにもありません。Word ドキュメントで対応するストリームを調べても、デコードされた文字列は明らかになりません。

PPDF> stream 4

q Q q 18 40 576 734 re W n /Cs1 cs 0 0 0 sc q 0.24 0 0 0.24 90 708.72 cm BT
-0.0004 Tc 50 0 0 50 0 0 Tm /TT2 1 Tf [ (!") -1 (#) -1 ($) -1 (%&'\() -1 (\))
-1 (*) -1 (*) -1 (\)) -1 (\() -1 ('&%$) -1 (#) -1 (") -1 (!) ] TJ ET Q q 0.24 0 0 0.24 239.168 708.72
cm BT 50 0 0 50 0 0 Tm /TT2 1 Tf (+) Tj ET Q Q

文字列がファイルのどこにあるのか、このストリーム内の情報が何を意味するのか、私にはわかりません。洞察はありますか?

4

2 に答える 2

5

文字列がファイルのどこにあるかはわかりません

一般に、コンテンツ ストリームにクリア テキストは表示されません。これは、そこで使用されるエンコーディングが標準エンコーディングである必要がなく、ASCII っぽいものである必要がないためです。

[ (!") -1 (#) -1 ($) -1 (%&'\() -1 (\)) -1 (*) -1 (*) -1 (\)) -1 (\() -1 ('&%$) -1 (#) -1 (") -1 (!) ] TJ

この操作の配列オペランドには、ZYXWVUTSRQQRSTUVWXYZ特定の文字ペアのカーニング修正が含まれています。

33 (= 0x21 = '!') 以降のバイトを使用したアドホック エンコーディングのようです。「!」必要な最初のグリフ、Z、2番目に必要なYには '"' 、3番目のものには '#' Xなどに使用されます。テスト文字列はこれらの文字で始まるだけでなく、それらで終わります。上記の配列、(!") -1 (#)... (#) -1 (") -1 (!).

使用されているフォントの定義を調べます ( TT2 )。このエンコーディングのデコードに役立つ情報が含まれている場合と含まれていない場合があります。

またはこのストリームの情報が何を意味するか。洞察はありますか?

PDF コンテンツ ストリームの内容を理解するには、PDF 仕様ISO 32000-1の関連セクション、特に 8 Graphicsおよび 9 Textの章を読む必要があります。

あなたの質問はテキストコンテンツの認識に焦点を当てているので、例えばセクション 9.10.2 Mapping Character Codes to Unicode Values を読んでください:

準拠するリーダーは、指定された優先順位でこれらのメソッドを使用して、文字コードを Unicode 値にマップできます。特に、タグ付き PDF ドキュメントは、これらのメソッドの少なくとも 1 つを提供する必要があります (14.8.2.4.2「タグ付き PDF の Unicode マッピング」を参照)。

  • フォント辞書に ToUnicode CMap が含まれている場合( 9.10.3「ToUnicode CMaps」を参照)、その CMap を使用して文字コードを Unicode に変換します。

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

    a) 表 D.1 およびフォントのDifferences配列に従って、文字コードを文字名にマップします。

    b) Adob​​e Glyph リスト(文献目録を参照) で文字名を調べて、対応する Unicode 値を取得します。

  • フォントが、表 118 にリストされている定義済みの CMaps のいずれかを使用する複合フォント (Identity-H および Identity-V を除く)、またはその子孫 CIDFont が Adob​​e-GB1、Adobe-CNS1、Adobe-Japan1、または Adob​​e-Korea1 を使用する複合フォントである場合キャラクターコレクション:

    a) フォントの CMap に従って、文字コードを文字識別子 (CID) にマップします。

    b) CIDSystemInfoディクショナリから、フォントの CMap (Adobe や Japan1 など) で使用される文字コレクションのレジストリと順序を取得します。

    c) 手順 (b) で取得したレジストリと順序を、registry–ordering –UCS2 の形式で連結して、2 番目の CMap 名を作成します (たとえば、Adobe–Japan1–UCS2)。

    d) 手順 (c) で作成された名前の CMap を取得します (ASN Web サイトから入手できます。参考文献を参照してください)。

    e) ステップ (d) で取得した CMap に従って、ステップ (a) で取得した CID をマップし、Unicode 値を生成します。

注: 派生 CIDFonts が Adob​​e-GB1、Adobe-CNS1、Adobe-Japan1、または Adob​​e-Korea1 文字コレクション (CIDSystemInfo 辞書で指定されている) を使用するタイプ 0 フォントには、準拠によってサポートされている PDF のバージョンに対応する補足番号が必要です。読者。特定の PDF バージョンに対応する文字コレクションのリストについては、表 3 を参照してください。(これらの文字コレクションの他の補足を使用できますが、補足がサポートされている PDF バージョンに対応するものよりも大きい番号である場合、後者の補足の CID のみが標準 CID と見なされます。)

これらのメソッドが Unicode 値の生成に失敗した場合、文字コードが何を表しているかを判断する方法がありません。この場合、適合するリーダーは、選択した文字コードを選択できます。

編集: コメントについて

オブジェクトの 1 つがフォント情報を提供しました。これは「JJOWGO+Cambria」であり、オブジェクト 16 を「フォント ファイル」として参照していますが、これも読み取り不能でした。マニュアルを見直してみます。「JJOWGO」についてオンラインで何も見つかりません。

そのフォントのすべてが埋め込まれているわけではなく、サブセットのみが埋め込まれていることを示すためにJJOWGO接頭辞が付けられたランダムなキーシーケンスである可能性が最も高いため、具体的なものは見つかりません。Cambria参照。セクション 9.6.4 ISO 32000-1フォントサブセット:

PDF ドキュメントには、Type 1 および TrueType フォントのサブセットが含まれる場合があります。フォント サブセットを記述するフォントとフォント記述子は、通常のフォントとは少し異なります。これらの違いにより、準拠するリーダーはフォント サブセットを認識し、同じフォントの異なるサブセットを含むドキュメントをマージできます。(フォント記述子の詳細は、9.8「フォント記述子」を参照してください。)

フォント サブセットの場合、フォントの PostScript 名 (フォントのBaseFontエントリとフォント記述子のFontNameエントリの値) は、タグで始まり、その後にプラス記号 (+) が続きます。タグは正確に 6 文字の大文字で構成されます。文字の選択は任意ですが、同じ PDF ファイル内の異なるサブセットには異なるタグが必要です。

例 EOODIA+Poetica は、Type 1 フォントである Poetica® のサブセットの名前です。

 <<
 /FontBBox [ -1475 -2463 2867 3117 ]
 /StemV 0
 /FontFile2 16 0 R
 /Descent -222
 /XHeight 467
 /Flags 4
 /Ascent 950
 /FontName /JJOWGO+Cambria
 /Type /FontDescriptor
 /ItalicAngle 0
 /AvgWidth 615
 /MaxWidth 2919
 /CapHeight 667
 >>

このフォント記述子には、明らかなエンコーディング情報は含まれていません。実際のFontディクショナリを見て、ToUnicodeエントリを探してください。上記のセクション 9.10.2 の引用。

于 2014-03-17T05:57:31.217 に答える