DOBON.NET DOBON.NETプログラミング掲示板過去ログ

用紙サイズ番号(dmPaperSize)を取得したいのですが

環境/言語:[WindowsXP VB6.0]
分類:[VB6以前]

アプリケーションからPDFを印刷するプログラムを作成しています。
おおまかな手順は、次の通り。

アプリケーションの印刷設定画面で、
 プリンタ,出力する用紙のサイズ,対象PDFを指定
 処理
 1 デフォルトプリンタを、選択したプリンタに設定
 2 デフォルトプリンタの出力用紙サイズを、指定した用紙サイズに設定
 3 対象PDFに日付などを書き加えて、用紙サイズにあわせて拡縮した
   PDFを作成
 4 AcrobatReader (Acro32rd.exe)に、/p /h /cjsオプションと、
   3で作成してPDFを指定して、起動
         Acro32rd.exe /p /h /cjs PrintOut.pdf

出力する用紙サイズは、A1,A2,A3,A4がありますが、
A1だけ印刷できない場合があり、原因を調べました。
 処理2で、用紙サイズ番号を指定して、プリンタのデフォルト用紙サイズを
 設定しています。
     A2 = 66  A3 = 8  A4 = 9
  という番号が、C言語のインクルードファイル(WinGDI.h)に定義されています。
  (VBの場合は、A3,A4だけが定義されている)
  A1が何かを調べたところ、用紙サイズ番号は120であることがわかりました。
  ★これで、A1に出力できたのですが、
  プリンタの削除,追加などを行っていると、
  A1に出力されなくなりました。(A4になったり、Acro32rd.exeが落ちたり)
  この時に、A1の用紙サイズ番号を確認すると131になっていました。
つまり、A1の場合は番号が決まっておらず、プリンタの追加,削除を行うことで
番号が変わるということがわかりました。
  WindowsXPのプリンタとFAXの「サーバのプロパティ」
    用紙 A2,A3,A4は削除できないのに、
    用紙 A1は削除できるようになっていました。
  このことからも、A1の用紙サイズ番号は固定ではないと推測しています。

VB6でプログラムを作っていますが、
プログラムの中から、用紙がA1の用紙サイズ番号(dmPaperSize)を
知る方法はないのでしょうか。

※ プリンタの現在の用紙サイズは取得できるので、
   120,131という番号がわかりました。
   プリンタの現在の用紙サイズがA1でない場合は、
   番号を知ることができません。

ご存知の方がおられたら、教えてください。
ユーザー定義用紙の扱いであれば番号は不定になります。
ということは"A1"すら変動要素であることになります。

なので、用紙の名前を決めて「PCに登録されていること」という仕様を作ることになるでしょう。
アプリではその名前で用紙番号をその場で求めることになるでしょう。

昔APIでやったことは、用紙名と用紙番号の一覧をそれぞれ求めて内容を検索するという方法です。
それぞれの一覧内での順序が一致しているという前提です。
#Frameworkで簡単にできるかどうかは調べていません。
ユーザー定義の用紙には悩みますよね。
まどかさん同様、私も、決まった名前で登録するのがよいと思います。
あとは、用紙サイズを用途別にデフォルト指定した決まった名前のこの処理専用のプリンタをいくつか作成しておく方法か。

DOBON.NET | プログラミング道 | プログラミング掲示板