入力データユーザー出口プログラムの入出力
InfoPrint Manager入力データユーザー出口プログラムは、次の目的で使用できます。
- InfoPrint Managerへの入力印刷データストリームを監視します。
- 入力レコードを処理前に破棄します。
- 既存の入力レコードを1つ以上のレコードで置換する(置換後のレコードには、元のレコードまたは元のレコードの変更バージョンが含まれることがあります)。
- 入力レコードを未変更のままで処理を続行します。
追加の入力レコードを挿入するために出口を使用している場合、出口に渡される元の入力レコードを、追加の入力レコードの前または後に処理できます。構造化フィールドリストに現行構造化フィールドを挿入する場所に応じ、現行構造化フィールドの前後に追加の入力レコードを挿入できます。
重要な考慮事項
- コード化処理は、PSFの不可欠な部分となっており、パフォーマンスや信頼性に影響することがあります。
- ユーザー出口は、システムの影響全体を認識している、経験を積んだプログラマーがコード化してください。
- この出口によって発生した遅延はすべてPSF処理遅延に変換されるため、プリンターのパフォーマンスに影響することがあります。
- この出口には、処理されるリソースに含まれる構造化フィールドが渡されません。これには、書式定義、オーバーレイ、ページセグメント、フォント、データオブジェクトリソース、内部メディアマップ、およびデータオブジェクトフォントが含まれます。
- コード化処理でPSF位置変更を処理可能にしておきます。
位置変更は、エラーまたはオペレーターコマンドの結果として行われる場合があります。PSFは、項目を印刷ジョブに進めて位置変更、構造化フィールドをスキップ、または項目を前に処理したデータに戻して位置変更できます。PSFが印刷ファイルに戻って位置変更する場合は、始めに構造化フィールドが出口に渡されたときと同じように、同じデータを同じ順序でPSFに戻すことが出口の責務です。
上記の制約があるため、まず、制限を持たない変換サブシステムを使用してデータを処理することを検討してください。たとえば、変換オブジェクトを使用すると、すべての入力データ(制約なし)にアクセスし、リソースとページを両方とも追加、削除、変更できます。また、変換サブシステムの処理は印刷開始前に実行されるため、プリンターのパフォーマンスや動作に影響しません。
入力データユーザー出口は、データストリームの個々の文書境界は識別できません。たとえば、ジョブに個別の文書が5つあり、各10ページのデータがあると仮定します。出口では、これを5つの10ページのデータではなく、50ページのデータとして見ます。変換サブシステムにはこの制限がありません。
PSF 入力レコード出口の責務は、割り振るすべてのメモリーを管理することです。出口では、ainuexit.h
で提供された作業域ポインターを使用し、呼び出し間のメモリーを再利用できます。PSF は、INDATA_EXITDATA
構造または PSFINSERTRECS
構造のいずれかのフィールドによって指されたメモリーを解放しません。出口は、定義されたメモリーまたは割り当てられたメモリーにポイントできます。必要に応じて、出口では割り振られたメモリーまたは解放されたメモリーを再利用できます。PSF
入力レコード出口がメモリーの管理を誤ると、PSF はメモリー不足になる場合があります。
サンプルPSF DSSユーザー出口プログラムページに示したサンプルの入力データユーザー出口プログラムのソースコード (C 言語で作成されたもの) は、install_path\exits\psf\ainuxind.c に入っています。このサンプルプログラムは 1 つの戻りコードだけで構成されていて、 関数は何も実行しません。
入力データユーザー出口プログラムのデータ構造は、ソースコードと共に install_path\exits\psf ディレクトリーに入っています。
この出口の宣言は次のとおりです。
void INDATA (INDATA_EXITDATA *exitdata)INDATA_EXITDATA入出力パラメーターには、InfoPrint Managerとユーザー出口プログラムとの通信に必要なすべての入出力データが含まれています。
PSFINSERTRECS構造には、入力データ出口の要求に応じて挿入される構造化フィールドに関する情報が含まれます。PSFINSERTRECS構造には、次のフィールドがあります。
- version
- この変数はこれまで
reserved1
と呼ばれていました。出口が変形した場合にマイグレーションエイドとして使用します。この変数には、この構造用の以下のバージョンIDが含まれています。- X'00'=前のバージョン(2005年8月より前)
- X'01'= 2005年8月バージョン(入力レコードの削除/挿入のサポートを追加)
- Copy
- この出口への呼び出しに関連付けられるのがどのコピーかを識別します。最初に1に設定され、出口が呼び出されるたびに1ずつ増分します。
- DataSize
- 入力データレコードの長さが含まれています。
- DataPointer
- 処理される入力データレコードを指します。
- DataType
- 常時 0 に設定されます (AFP。MO:DCA データのみ)。
注意: ジョブ処理の終了を示すために出口が呼び出されている場合、次のようになります。
- DataSizeは0に設定されます。
- DataPointerはNULLに設定されます。
- DataTypeは0に設定されます。
その時点でレコードは渡されません。 PSFINSERTRECS構造には、入力データ出口の要求に応じて挿入される構造化フィールドに関する情報が含まれます。PSFINSERTRECS構造には、次のフィールドがあります。
- version
- versionは、PSFに、提供されているPSFINSERTRECS構造のバージョンを識別します。出口は、値0x01を提供してください。 提供しない場合は、レコード(
next_p
ポインターを含む)は無視されます。 - next_p
- 挿入する次のレコードへのポインターが含まれています。
- record_p
- 挿入するMO:DCA(AFP)構造化フィールドへのポインターがあります。
重要
install_path¥exits¥psf内のainuexit.h
ソースファイルの、追加のデータ定義とコメントを参照してください。