IPrint
COM公式ドキュメント
複合ドキュメント全般、特にアクティブドキュメントがプログラムによる印刷をサポートできるようにします。
解説(Remarks)
ドキュメントの読み込み後、コンテナーやその他のクライアントは IPrint::Print を呼び出して、ドキュメント自身に印刷を指示できます。その際、印刷制御フラグ、ターゲットデバイス、印刷する特定のページ、その他のオプションを指定します。クライアントは IContinueCallback インターフェイスを呼び出すことで、印刷の継続を制御できます。
IPrint を実装するオブジェクトは、自身の CLSID の下に格納された Printable キーを使用して、次のように自身を登録します。
HKEY_CLASSES_ROOT\CLSID{...}\Printable
呼び出し元は、レジストリでこのキーを調べることにより、特定のオブジェクトクラスが永続状態のプログラムによる印刷をサポートしているかどうかを判断します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ドキュメントの最初のページのページ番号を設定します。
| nFirstPage | INT | in | 最初のページのページ番号。 |
戻り値
このメソッドは、標準的な戻り値 E_UNEXPECTED、E_FAIL、および S_OK を返すことがあります。
解説(Remarks)
最初のページに負の数を設定することは有効です。これは、通常のページ付けからのオフセットを指定するページ番号でドキュメントの一部を印刷する場合に役立つことがあります。
すべての実装が最初のページ番号の設定を許可しているわけではありません。一部の実装では、最終出力でページ番号をどのように表示すべきかに関する情報を単純に持っていないためです。
ドキュメントの最初のページの番号と総ページ数を取得します。
| pnFirstPage | INT* | out | 最初のページのページ番号を受け取る変数へのポインター。このパラメーターは NULL にすることができ、その場合は呼び出し元がこの番号に関心がないことを示します。IPrint::SetInitialPageNum が呼び出されている場合、このパラメーターにはそのメソッドに渡されたのと同じ値が格納されるはずです。それ以外の場合、値はドキュメント内部の最初のページ番号になります。 |
| pcPages | INT* | out | このドキュメントの総ページ数を受け取る変数へのポインター。このパラメーターは NULL にすることができ、その場合は呼び出し元がこの番号に関心がないことを示します。 |
戻り値
このメソッドは、標準的な戻り値 E_UNEXPECTED および S_OK を返すことがあります。
指定されたジョブ要件を使用して、指定されたプリンター上にオブジェクトを印刷します。
| grfFlags | DWORD | in | PRINTFLAG 列挙体からの印刷オプションを指定するビットフィールド。 PRINTFLAG_MAYBOTHERUSER (1)PRINTFLAG_PROMPTUSER (2)PRINTFLAG_USERMAYCHANGEPRINTER (4)PRINTFLAG_RECOMPOSETODEVICE (8)PRINTFLAG_DONTACTUALLYPRINT (16)PRINTFLAG_FORCEPROPERTIES (32)PRINTFLAG_PRINTTOFILE (64) |
| pptd | DVTARGETDEVICE** | inout | ターゲットの印刷デバイスを記述する DVTARGETDEVICE 構造体へのポインター。 |
| ppPageSet | PAGESET** | inout | どのページを印刷するかを示す構造体へのポインターを受け取る、PAGESET ポインター変数へのポインター。 |
| pstgmOptions | STGMEDIUM* | inout | シリアル化された OLE プロパティセット内の、オブジェクト固有の印刷オプションへのポインター。このパラメーターは、入力時または戻り時に NULL にすることができます。 |
| pcallback | IContinueCallback* | in | ビューサイト上の IContinueCallback インターフェイスへのポインター。印刷を中止すべきかどうかを判断するために、人間の応答速度で定期的にポーリングされます。このパラメーターは NULL にすることができます。 |
| nFirstPage | INT | in | 印刷する最初のページのページ番号。この値は、以前に IPrint::SetInitialPageNum に渡された値を上書きします。 |
| pcPagesPrinted | INT* | out | 実際に正常に印刷されたページ数を受け取る変数へのポインター。 |
| pnLastPage | INT* | out | 印刷された最後のページのページ番号を受け取る変数へのポインター。 |
戻り値
このメソッドは、標準的な戻り値 E_UNEXPECTED のほか、次の値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| メソッドが正常に完了しました。 | |
|
印刷処理が完了前にキャンセルされました。*pcPagesPrinted は、このエラーが発生する前に実際に正常に印刷されたページ数を示します。 |
|
**ppPageSet または nFirstPage で指定されたページが存在しません。 |
解説(Remarks)
オブジェクトを印刷するプリンターは、pptd が指す DVTARGETDEVICE 構造体によって示されます。ターゲットデバイス内の DEVMODE 構造体は、部数、用紙サイズ、印刷品質など、ジョブ全体に対するプリンター固有のオプションを示します。DEVMODE 構造体には、dmOrientation メンバーに用紙の向きの情報が含まれることもあります(これは dmFields メンバーで示されます)。存在する場合は、この用紙の向きを使用する必要があります。存在しない場合は、オブジェクトのコンテンツによって決定される自然な向きが使用されます。
ユーザー入力の可能性があるため、パラメーター pptd および ppPageSet はいずれも [in,out] 構造体です。ユーザーの操作がない場合(つまり PRINTFLAG_PROMPTUSER フラグが設定されていない場合)、ターゲットデバイスとページセットは入力時と出力時で必ず同じになります。ただし、ユーザーに印刷オプションの入力を求める場合、オブジェクトはユーザーが実際に選択した内容に応じたターゲットデバイスとページセットの情報を返します。
pstgmOptions パラメーターも [in,out] です。終了時に、オブジェクトはこの印刷ジョブを正確に再現するために必要となるオブジェクト固有の情報を *pstgmOptions に書き込む必要があります。例としては、スプレッドシートアプリケーションでユーザーが「シート、メモ、または両方」のいずれを選択したかなどが挙げられます。渡されるデータは、シリアル化されたプロパティセットの形式です。このデータは通常、同じオブジェクトへの後続の呼び出しに渡された場合にのみ有用です。後続の呼び出しでは異なるユーザー操作フラグ、ターゲットデバイス、その他の設定が指定される可能性があるため、呼び出し元は、わずかに異なる印刷コンテキストで同じ方法によりドキュメントを複数回印刷させることができます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPrint "{B722BCC9-4E68-101B-A2BC-00AA00404770}" #usecom global IPrint IID_IPrint "{}" #comfunc global IPrint_SetInitialPageNum 3 int #comfunc global IPrint_GetPageInfo 4 var,var #comfunc global IPrint_Print 5 int,var,var,var,sptr,int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPrint "{B722BCC9-4E68-101B-A2BC-00AA00404770}" #usecom global IPrint IID_IPrint "{}" #comfunc global IPrint_SetInitialPageNum 3 int #comfunc global IPrint_GetPageInfo 4 sptr,sptr #comfunc global IPrint_Print 5 int,sptr,sptr,sptr,sptr,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。