入力データユーザー出口プログラムの入出力

InfoPrint Manager入力データユーザー出口プログラムは、次の目的で使用できます。

  • InfoPrint Managerへの入力印刷データストリームを監視します。
  • 入力レコードを処理前に破棄します。
  • 既存の入力レコードを1つ以上のレコードで置換する(置換後のレコードには、元のレコードまたは元のレコードの変更バージョンが含まれることがあります)。
  • 入力レコードを未変更のままで処理を続行します。
この出口は、ジョブのすべての部分について呼び出すことができます(プリンターでのInfoPrint Manager ユーザー出口プログラムの順序を参照)。
注意: 入力データユーザー出口プログラムは、MO:DCAデータだけ処理します。

追加の入力レコードを挿入するために出口を使用している場合、出口に渡される元の入力レコードを、追加の入力レコードの前または後に処理できます。構造化フィールドリストに現行構造化フィールドを挿入する場所に応じ、現行構造化フィールドの前後に追加の入力レコードを挿入できます。

重要な考慮事項

  • コード化処理は、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ソースファイルの、追加のデータ定義とコメントを参照してください。

注意: 一部のサンプルプログラムで使用される入力情報フィールドは、代替サンプルユーザー出口を介して使用可能なものです。InfoPrint Managerには代替入力データユーザー出口がありません。