2011-01-28 14 views
2

誰かがCGPDFScannerを使ってフォント辞書のToUnicode CMapストリームエントリを解析しましたか?私はいくつかの問題に遭遇している。CGPDFScannerでCMapストリームを解析する

私は辞書からCGPDFStreamリファレンスを取得し、それと一緒にCGPDFScannerを構築しようとします。問題は、CGPDFScannerがCGPDFStreamではなく、CGPDFFContentStreamを引数として取ることです。

私は簡単にCGPDFContentStreamCreateWithPageでCGPDFContentStreamを得ることができ、テキストのオペレータが、姉妹機能CGPDFContentStreamCreateWithStreamためCGPDFPageを解析 - あなたは、フォームの内容へのアクセスを取得するには、この機能を使用することができます」と言われ、パターン、タイプ3フォント、または任意のPDFストリーム " - CGPDFContentStream Referenceでやや濁っていて、サンプルコードを見つけることができません。とにかく

、私はストリーム引数、CGPDFDictionaryはstreamResourcesパラメータとなどのページコンテンツストリームとしてCGPDFStreamGetDictionaryとストリームから取得したリソースとしてCMapのストリームを渡します。リソースディクショナリはストリーム自体から簡単に取得できるので、なぜ最初にそれを聞かせても構わないのですか?その上に、パラメータとしてNULLを渡すが、最初は何の効果もないようだ。

結果は常に同じです:私は、私は、コールバックテーブルに設定し、すべての作業のため、以下のメッセージ

 
`begincodespacerange' isn't an operator. 
`beginbfrange' isn't an operator. 
... 
`endbfrange' isn't an operator. 

を取得し、いくつかのコールバックを設定するスキャナでコンテンツストリームをスキャンしようとします。これは遭遇したすべてのCMapに対してです。

オペレータが無効である場合や、通常のPDFストリームオブジェクトであってもCGapDFannerを使用してCMapを解析することができない場合、コンテンツストリームが間違った方法で設定されているかどうかはわかりませんストリームデータを解析するために私自身のスキャナを書くことに頼ります。

答えて

3

CGPDFScannerは、PDFコンテンツストリーム、表示用のコンテンツを含むストリームのみを解析できます。ページコンテンツ、フォームXObjects、パターン、タイプ3フォントは同じストリーム形式を共有します。 ToUnicode CMapはまったく異なるストリームであり、コンテンツストリームとは異なる構文を使用します。 CMapを解析するための独自のスキャナを書く必要があります。 ToUnicode CMapフォーマットは、Adobe PDF仕様、PDFリファレンス1.7のセクション5.9.2、Adobeテクニカルノート#5014および#5411に記載されています。

+0

です。また、PDF演算子テーブル(Appendinx A)を見ると、すべてのCMap演算子でトレースがありません。 CGPDFContentStreamCreateWithStreamと共に「any PDF stream」が私を欺いた。ご説明ありがとうございます。 – sigsegv

関連する問題