2

私は、当社の PDF リーダー アプリを作成する任務を負っています。いくつかの調査の後、PDF 内のさまざまな演算子と混同されました。ここに私が明確にしたいことがいくつかあります:

  • 演算子は、Tm各行の開始点として使用されます。(私の理解は正しいですか?)
  • 演算子がすべての行の開始点である場合、指定された範囲内でのみTm表示されるテキストを解析するにはどうすればよいですか? 例えば:Tm

     BT
        0 0 1 rg
        /Ti 12 Tf
        1 0 0 1 100 100 Tm
        0 0 Td
        (The quick brown fox ) Tj 0 −13 Td
        (ate the lazy mouse.) Tj
     ET
     //I only want to get the Tj and TJ string being positioned by the Tm
    
  • グリフの高さと幅の 1000 単位ごとに、テキスト スペースの 1 単位に相当することを理解しています。では、グリフの幅が 2000 で高さが 1060 の場合、「実際の」幅と高さはそれぞれ 2 と 1.06 ということですか?

これらの質問のいくつかがまったくばかげているように聞こえることはわかっていますが、調査する時間はあまりありません. 誰かが私がこれを理解するのを手伝ってくれるなら、それは間違いなく感謝されます.

: PDF リーダー アプリには、検索とハイライト機能、テキスト選択、メモ、ブックマークなどを含める必要があります。現在利用可能なほぼすべてのリーダーで見つけることができる基本的なものは事実上すべてです。おそらくサードパーティ製のライブラリを使用して作業を楽にしようと思いますが、最大の問題はテキスト選択機能です。だから私は本当にこれを理解する必要があります。

4

2 に答える 2

7

PDF 仕様に慣れる必要があります。付録 A には、すべての演算子の概要と、パラメーターに関するより詳細なドキュメントへのリンクが含まれているため、出発点として適しています。

Tmオペレーターは、必ずしも各行の開始点を設定する必要はありません。通常、テキスト マトリックスを設定します。これは、Quartz2D に関しては基本的に a に相当しますCGAffineTransform。次の行に移動するには、ドキュメントTdで 、TD"またはT*演算子を使用することもできます。PDF ドキュメントは、必ずしも画面に表示される順序でテキストを描画するとは限りません。ページ上を自由に移動し、適切と思われる順序でグリフを配置することができます。PDFには実際には「線」の概念がありません。グリフの位置から自分で推測する必要があります(下付き文字/上付き文字などでは難しい場合があります)。

于 2012-06-29T09:28:28.870 に答える
5

うーん...あなたは非常に重要な仕事を任されています。PDF-1.7 仕様は約 800 ページの高密度のドキュメントであることを伝える必要があります...

はい、これにはサードパーティのライブラリを使用することをお勧めします。PDF-1.7 (ISO 仕様) ファイルに埋め込まれている可能性のあるすべてのグラフィック オブジェクト、フォント、色、透明度、ベクター グラフィック、画像などを正確に表示できる適合 PDF リーダーを 1 人で実装することは不可能です。

最初に知っておくべきいくつかのこと:

  • PDF は、PostScript と同じグラフィックス モデルに基づいています。(ただし、PostScript はチューリング完全なプログラミング言語ですが、PDF は -- 意図的に! -- すべてのプログラミング言語機能が取り除かれています。)
  • PostScript と同様に、PDF のグラフィック記述「言語」はスタックを使用しており、式に逆の「ポーランド語表記」を使用しています。演算子は最後に、演算子の引数は最初に来ます。「1 + 2」を表現するには、PostScript で「1 2 add」と記述します。
  • PDF はほとんど「行ベース」ではありません。したがって、あなたの質問に関してTm:それは新しい行の開始点ではなく、「前の6つの数字はテキスト行マトリックスの設定を表し、現在は名前付きの値に設定されています」という1 0 0 1 100 100式の終わりです. 行の開始よりも、行の終了の方がよいでしょう。Tm
于 2012-06-29T15:56:10.143 に答える