kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

プリンタは悩ましい

Windowsではバージョンによって差がありますが、用紙サイズがいくつか定義されています。NT4.0で68個、Windows 2000以降で118個。結構日本独自と思われる形式も入っています。たとえばDMPAPER_JENV_KAKU2_ROTATED(Japanese Envelope Kaku #2 Rotated:封筒 角型 2号 横)とか。
ところが業務では足りないことが結構あります。高速ラインプリンタに打つような場合です。こういうのは定型外(ユーザ定義)として「サーバごとに」定義する必要があります。「プリンタとFAX」を開いて「ファイル→サーバのプロパティ」から「新しい容姿を作成する」です。
そして、定義した用紙はEnumForms()で取得できるし、印刷のときに指定することもできる…はずなんですが、とある会社のプリンタだとプリンタのユーティリティ(正確にはメーカ独自のタブ)から明示的に追加してあげないといけないくさいです。
また、EnumFormsの最後の引数pcReturnedには定義されている用紙の数が返却されます。じゃあcbBuf/sizeof(FORM_INFO_1)で割った値と一緒だよねとか思っていたのですが、異なる値を返すプリンタドライバがあって、泣きそうでした。
実際にデータを打つ以外のことはメーカサイトからプリンタドライバダウンロードするだけでできてしまうので、助かることは助かるのですが…。