PostScript 変換
Preview アプリケーションは自動的に PostScript ファイルを PDF に変換します。Quartz 2D API は、あなたのアプリケーションで PostScript 変換を実行するために使用できる関数を提供しています。Quartz 2D PostScript 変換関数は、iOS では使用できません。
以下の手順に従い、PostScript 文書を PDF 文書に変換します。
- 呼び出し関数を作成します。Quartz は呼び出し関数を通してページごとのプロセスの状態を伝達します。
- 呼び出し関数構造体を埋めます。
- PostScript 変換オブジェクトを作成します。
- 変換したい PostScript ファイル用のデータプロバイダオブジェクトを作成します。
- 変換結果の PDF 用のデータコンシューマオブジェクトを作成します。
- 変換を実行します。
これらの各ステップについては、以降の節で説明します。
呼び出し関数を書く
呼び出し関数は、Quartz が変換の状態をアプリケーションに通知する方法を提供します。アプリケーションにユーザーインターフェイスがある場合、図 15-1 に示したように、状態情報を使用してユーザーにフィードバックを提供できます。
図 15-1 PostScript 変換アプリケーションの状態メッセージ
呼び出し関数を提供すると、Quartz 2D は以下のようにアプリケーションに通知できます:
- 変換の開始(CGPSConverterBeginDocumentCallback)。Quartz 2D は、あなたが提供したデータへの汎用ポインタを呼び出し関数に渡します。
- 変換の終了(CGPSConverterEndDocumentCallback)。Quartz 2D は、あなたが提供したデータへの汎用ポインタと、成功(true) または失敗(false) を示すブール値を渡します。
- ページの開始(CGPSConverterBeginPageCallback)。Quartz 2D は、あなたが提供したデータ、ページ番号、および現在使用されていない CFDictionary オブジェクトへの汎用ポインタを呼び出し関数に渡します。
- ページの終了(CGPSConverterEndPageCallback)。Quartz 2D は、あなたが提供したデータへの汎用ポインタと、成功(true) または失敗(false) を示すブール値を渡します。
- 変換進行中(CGPSConverterProgressCallback)。この呼び出し関数は変換中を通して定期的に呼び出されます。Quartz 2D は、あなたが提供したデータへの汎用ポインタを呼び出し関数に渡します。
- プロセスに関するメッセージを送信(CGPSConverterMessageCallback)。変換処理中に送信できるメッセージにはいくつかの種類があります。最も可能性が高いのは、フォント置換メッセージ、および PostScript コード自体が生成するメッセージです。stdout に書かれた PostScript メッセージは、この呼び出し関数を通じてルーティングされます。通常、これらはデバッグメッセージまたはステータスメッセージです。また、文書の形式が誤っていると、エラーメッセージが表示されることがあります。
Quartz 2D は、あなたが提供したデータへの汎用ポインタと、変換に関するメッセージを含む CFString オブジェクトを呼び出し関数に渡します。 - PostScript コンバータオブジェクト(CGPSConverterReleaseInfoCallback) の割り当てを解除します。この呼び出し関数を使用して、データを提供した場合には汎用ポインタの割り当てを解除し、追加のタスクの後処理を実行します。Quartz 2D は、あなたが提供するデータへの汎用ポインタを呼び出し関数に渡します。
各呼び出し関数が従うプロトタイプについては CGPSConverter リファレンス を参照してください。
呼び出し関数構造体を埋める
バージョン番号と作成した呼び出し関数を CGPSConverterCallbacks データ構造の適切なフィールドに割り当てる必要があります(リスト 15-1 に示した)。バージョンは 0 です。呼び出し関数を提供しないフィールドには NULL を割り当てます。
リスト 15-1 PostScript 変換呼び出し関数のデータ構造
struct CGPSConverterCallbacks { unsigned int version; CGPSConverterBeginDocumentCallback beginDocument; CGPSConverterEndDocumentCallback endDocument; CGPSConverterBeginPageCallback beginPage; CGPSConverterEndPageCallback endPage; CGPSConverterProgressCallback noteProgress; CGPSConverterMessageCallback noteMessage; CGPSConverterReleaseInfoCallback releaseInfo; };
PostScript 変換オブジェクトの作成
CGPSConverterCreate 関数を呼び出して、PostScript コンバータオブジェクトを作成します。この関数は 3 つのパラメータをとります:
- 呼び出し関数に渡したい汎用データへのポインタ。データを提供する必要がない場合は、NULL を指定できます。
- 埋められた CGPSConverterCallbacks データ構造体へのポインタ。
- NULL。このフィールドは、将来の使用のために予約されています。
データプロバイダおよびデータコンシューマオブジェクトの作成
変換したい PostScript ファイルのアドレスを指定する CFURL オブジェクトを指定して、CGDataProviderCreateWithURL 関数を呼び出してデータプロバイダオブジェクトを作成します。
同様に、CGDataConsumerCreateWithURL 関数を呼び出してデータコンシューマオブジェクトを作成し、変換結果の PDF 文書のアドレスを指定する CFURL オブジェクトを指定します。
変換の実行
CGPSConverterConvert 関数を呼び出して、PostScript から PDF への実際の変換を実行します。この関数は以下のパラメータをとります:
- PostScript 変換オブジェクト。
- PostScript データを提供するデータプロバイダオブジェクト。
- 変換されたデータのデータコンシューマオブジェクト。
- NULL。このパラメータは、将来の使用のために予約されています。
変換が成功すると、この関数は true を返します。
CGPSConverterIsConverting 関数を呼び出して、変換がまだ進行中かどうかを確認できます。
前の章 次の章