none
DMPAPER_USERについて RRS feed

  • 質問

  • プリンタに用紙のサイズを指定して(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に用紙のサイズを指定すると、

    紙には出力できないものなのでしょうか?

     

    何か良い方法があれば教えて頂けないでしょうか?

     

    また、電子データとして出力するか、紙に出力するかを判定する方法を

    ご存知でしたら、教えて頂けないでしょうか?

    宜しくお願いいたします。

    2012年2月1日 8:26

回答

  • 試していないので外しているかもしれません。

    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 以上はデバイスが指定する値となっているので、
    # 対象のデバイスによってサポートする・しないが変わると思われますし、
    # どのような用紙サイズになるかも特定できないのでは?


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2012年2月1日 13:40
    モデレータ
  •  プリンタでエラーが表示されるなら、プリンタのメーカーに、表示されているエラーが出る条件を尋ねて下さい。


    ------
    トレイ1 セット
    テイケイガイ
    ------

     このメッセージは、エラーと言うより、「トレイ1に定形外の用紙がセットされている」事を伝えるためのメッセージのように思います。

     私が関わっているプリンターには、カセットと手差しトレイがあります。カセットには、定型の用紙しかセットできません。そういう制約がないですか?

     また、定形外の用紙をセットして、用紙ガイドを違うサイズでセットした場合、1枚は印刷できますが、その後「セットされている用紙のサイズが違います」というエラーになります。セットした用紙のサイズと、実際の用紙のサイズが異なると、装置寿命に影響する問題があるため、エラーとなります。


    Jitta@わんくま同盟

    • 回答の候補に設定 山本春海 2012年3月13日 5:50
    • 回答としてマーク 山本春海 2012年4月12日 8:19
    2012年2月7日 12:29
  • dmDefaultSource の設定(または、指定されていないのでデフォルト)が、トレイ1になっていて定型専用なのでは?

    多くのプリンタでは、定形外の出力には手差しトレイとかMPトレイとかいったかんじの専用の給紙位置があり、dmDefaultSource にそれを指定しないと動きません。

    また、メーカーによってこのトレイに割り振られている番号は違います。(追加ホッパの有無などのハードウェア構成によっても変化します)

    このため、通常は印刷ダイアログを表示しプリンタメーカーが提供するドライバによって UI を表示して、そっちで設定してもらいます。(自動印刷するようなアプリだと、インストール時に1度だけ設定してもらって、プリンタが変更になるまではその値を覚えておいたりします

    • 回答の候補に設定 山本春海 2012年3月13日 5:51
    • 回答としてマーク 山本春海 2012年4月12日 8:19
    2012年2月8日 3:58

すべての返信

  • 試していないので外しているかもしれません。

    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 以上はデバイスが指定する値となっているので、
    # 対象のデバイスによってサポートする・しないが変わると思われますし、
    # どのような用紙サイズになるかも特定できないのでは?


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2012年2月1日 13:40
    モデレータ
  • Azuleanさん

    返信、有難うございました。

    >dmPaperLength/dmPaperWidth を設定しているのであれば、 0 を指定すべきでは?

    0を指定しましたが、現象は変わりませんでした。

    おっしゃるように、デバイスによってサポートする/しないかがあるのではないかと思います。

     

    宜しくお願いいたします。

     

     

    2012年2月3日 10:08
  • プリンターの開発に携わっています。

    「プリンタに紙として実際に出力すると、プリンタでエラーとなって紙として出力されません。」と言うことですが、どこで、どんなエラーになっているのでしょうか。コードがエラーになる?プリンターがエラーを表示する?プリンターがエラーを表示するなら、そのプリンターに、なぜエラーになったのか、メッセージが表示されていないでしょうか。

    私が関わっているプリンターの話をします。まず、プリンター側で用紙サイズを設定します。この時、A4やB4など、定型の用紙以外は設定できるカセットが決まっています。その特定のカセットに用紙を入れ、プリンターのパネル(またはプリンターが公開しているインターネット サービス)で、用紙のサイズを設定します。それと同じ値で送ってやらないと、「用紙サイズ不一致」というエラーになります。

    コードがエラーを出すのなら、そのエラーの詳細を書いて下さい。

    なお、プリンターの開発は行っていますが、ドライバーやプリンターを使ったアプリケーションの開発には関わっていないので、コード側の設定は、あまりわかりません。


    Jitta@わんくま同盟
    2012年2月3日 12:32
  • Jittaさん

    返信有難うございます。

    コードがエラーになる?プリンターがエラーを表示する?

    プリンターがエラーを表示するなら、そのプリンターに、なぜエラーになったのか、メッセージが表示されていないでしょうか。

    プリンタによって、エラーが表示される場合とされない場合があります。

    表示される場合は、以下のように表示されています。

    ------

    トレイ1 セット

    テイケイガイ

    ------

    宜しくお願いいたします。

    2012年2月7日 4:05
  •  プリンタでエラーが表示されるなら、プリンタのメーカーに、表示されているエラーが出る条件を尋ねて下さい。


    ------
    トレイ1 セット
    テイケイガイ
    ------

     このメッセージは、エラーと言うより、「トレイ1に定形外の用紙がセットされている」事を伝えるためのメッセージのように思います。

     私が関わっているプリンターには、カセットと手差しトレイがあります。カセットには、定型の用紙しかセットできません。そういう制約がないですか?

     また、定形外の用紙をセットして、用紙ガイドを違うサイズでセットした場合、1枚は印刷できますが、その後「セットされている用紙のサイズが違います」というエラーになります。セットした用紙のサイズと、実際の用紙のサイズが異なると、装置寿命に影響する問題があるため、エラーとなります。


    Jitta@わんくま同盟

    • 回答の候補に設定 山本春海 2012年3月13日 5:50
    • 回答としてマーク 山本春海 2012年4月12日 8:19
    2012年2月7日 12:29
  • dmDefaultSource の設定(または、指定されていないのでデフォルト)が、トレイ1になっていて定型専用なのでは?

    多くのプリンタでは、定形外の出力には手差しトレイとかMPトレイとかいったかんじの専用の給紙位置があり、dmDefaultSource にそれを指定しないと動きません。

    また、メーカーによってこのトレイに割り振られている番号は違います。(追加ホッパの有無などのハードウェア構成によっても変化します)

    このため、通常は印刷ダイアログを表示しプリンタメーカーが提供するドライバによって UI を表示して、そっちで設定してもらいます。(自動印刷するようなアプリだと、インストール時に1度だけ設定してもらって、プリンタが変更になるまではその値を覚えておいたりします

    • 回答の候補に設定 山本春海 2012年3月13日 5:51
    • 回答としてマーク 山本春海 2012年4月12日 8:19
    2012年2月8日 3:58