トップ回答者
DMPAPER_USERについて

質問
-
プリンタに用紙のサイズを指定して(DMPAPER_USERを使用して)出力しようと思っています。
しかし、プリンタに紙として実際に出力すると、プリンタでエラーとなって紙として出力されません。
"Adobe PDF"や、"Mictosoft XPS Document Writer"のように電子データとして出力する場合には、
指定した用紙サイズで出力されています。
用紙のサイズを指定するときには、下のようにコードで指定しています。
-----
pi2->pDevMode->dmPaperSize = DMPAPER_USER;
pi2->pDevMode->dmPaperLength = Y方向の値;
pi2->pDevMode->dmPaperWidth = X方向の値;
pi2->pDevMode->dmFields |= (DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH);
----
#pi2は、PRINTER_INFO_2のポインタです。
このあと、DocumentProperties、CreateDCを行って、印刷をしています。
dmPaperSizeにDFPAPER_USERを指定し、
dmPaperLengthとdmPaperWidthに用紙のサイズを指定すると、
紙には出力できないものなのでしょうか?
何か良い方法があれば教えて頂けないでしょうか?
また、電子データとして出力するか、紙に出力するかを判定する方法を
ご存知でしたら、教えて頂けないでしょうか?
宜しくお願いいたします。
回答
-
試していないので外しているかもしれません。
DEVMODE Structure
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565(v=vs.85).aspxここによると、"This member can be set to zero if the length and width of the paper are both set by the dmPaperLength and dmPaperWidth members." だそうなので、dmPaperLength/dmPaperWidth を設定しているのであれば、 0 を指定すべきでは?
# DMPAPER_USER 以上はデバイスが指定する値となっているので、
# 対象のデバイスによってサポートする・しないが変わると思われますし、
# どのような用紙サイズになるかも特定できないのでは?
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 編集済み AzuleanMVP, Moderator 2012年2月1日 13:42
- 回答の候補に設定 山本春海 2012年3月13日 5:50
- 回答としてマーク 山本春海 2012年4月12日 8:19
-
プリンタでエラーが表示されるなら、プリンタのメーカーに、表示されているエラーが出る条件を尋ねて下さい。
------
トレイ1 セット
テイケイガイ
------このメッセージは、エラーと言うより、「トレイ1に定形外の用紙がセットされている」事を伝えるためのメッセージのように思います。
私が関わっているプリンターには、カセットと手差しトレイがあります。カセットには、定型の用紙しかセットできません。そういう制約がないですか?
また、定形外の用紙をセットして、用紙ガイドを違うサイズでセットした場合、1枚は印刷できますが、その後「セットされている用紙のサイズが違います」というエラーになります。セットした用紙のサイズと、実際の用紙のサイズが異なると、装置寿命に影響する問題があるため、エラーとなります。
Jitta@わんくま同盟
-
dmDefaultSource の設定(または、指定されていないのでデフォルト)が、トレイ1になっていて定型専用なのでは?
多くのプリンタでは、定形外の出力には手差しトレイとかMPトレイとかいったかんじの専用の給紙位置があり、dmDefaultSource にそれを指定しないと動きません。
また、メーカーによってこのトレイに割り振られている番号は違います。(追加ホッパの有無などのハードウェア構成によっても変化します)
このため、通常は印刷ダイアログを表示しプリンタメーカーが提供するドライバによって UI を表示して、そっちで設定してもらいます。(自動印刷するようなアプリだと、インストール時に1度だけ設定してもらって、プリンタが変更になるまではその値を覚えておいたりします
)
すべての返信
-
試していないので外しているかもしれません。
DEVMODE Structure
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565(v=vs.85).aspxここによると、"This member can be set to zero if the length and width of the paper are both set by the dmPaperLength and dmPaperWidth members." だそうなので、dmPaperLength/dmPaperWidth を設定しているのであれば、 0 を指定すべきでは?
# DMPAPER_USER 以上はデバイスが指定する値となっているので、
# 対象のデバイスによってサポートする・しないが変わると思われますし、
# どのような用紙サイズになるかも特定できないのでは?
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 編集済み AzuleanMVP, Moderator 2012年2月1日 13:42
- 回答の候補に設定 山本春海 2012年3月13日 5:50
- 回答としてマーク 山本春海 2012年4月12日 8:19
-
プリンターの開発に携わっています。
「プリンタに紙として実際に出力すると、プリンタでエラーとなって紙として出力されません。」と言うことですが、どこで、どんなエラーになっているのでしょうか。コードがエラーになる?プリンターがエラーを表示する?プリンターがエラーを表示するなら、そのプリンターに、なぜエラーになったのか、メッセージが表示されていないでしょうか。
私が関わっているプリンターの話をします。まず、プリンター側で用紙サイズを設定します。この時、A4やB4など、定型の用紙以外は設定できるカセットが決まっています。その特定のカセットに用紙を入れ、プリンターのパネル(またはプリンターが公開しているインターネット サービス)で、用紙のサイズを設定します。それと同じ値で送ってやらないと、「用紙サイズ不一致」というエラーになります。
コードがエラーを出すのなら、そのエラーの詳細を書いて下さい。
なお、プリンターの開発は行っていますが、ドライバーやプリンターを使ったアプリケーションの開発には関わっていないので、コード側の設定は、あまりわかりません。
Jitta@わんくま同盟 -
プリンタでエラーが表示されるなら、プリンタのメーカーに、表示されているエラーが出る条件を尋ねて下さい。
------
トレイ1 セット
テイケイガイ
------このメッセージは、エラーと言うより、「トレイ1に定形外の用紙がセットされている」事を伝えるためのメッセージのように思います。
私が関わっているプリンターには、カセットと手差しトレイがあります。カセットには、定型の用紙しかセットできません。そういう制約がないですか?
また、定形外の用紙をセットして、用紙ガイドを違うサイズでセットした場合、1枚は印刷できますが、その後「セットされている用紙のサイズが違います」というエラーになります。セットした用紙のサイズと、実際の用紙のサイズが異なると、装置寿命に影響する問題があるため、エラーとなります。
Jitta@わんくま同盟
-
dmDefaultSource の設定(または、指定されていないのでデフォルト)が、トレイ1になっていて定型専用なのでは?
多くのプリンタでは、定形外の出力には手差しトレイとかMPトレイとかいったかんじの専用の給紙位置があり、dmDefaultSource にそれを指定しないと動きません。
また、メーカーによってこのトレイに割り振られている番号は違います。(追加ホッパの有無などのハードウェア構成によっても変化します)
このため、通常は印刷ダイアログを表示しプリンタメーカーが提供するドライバによって UI を表示して、そっちで設定してもらいます。(自動印刷するようなアプリだと、インストール時に1度だけ設定してもらって、プリンタが変更になるまではその値を覚えておいたりします
)