none
プリンターごとの印刷可能領域の調整方法 RRS feed

  • 質問

  • おはようございます。

    VB2005Express+SQLServerExpressを使用しております。

    PrintDocumentを利用して印刷を行っております。

    あるプリンターですべて表示される印刷が別のプリンターでは一部切れてしまうという現象が起こっています。

    調べたところ、プリンターの種類によりPrintDocumentで指定する余白とは別に、印刷可能領域というものがあり、
    それが印刷が切れてしまう原因らしいというところまではわかりました。

    何とかこれに対応しようと考えており、以下2つの方法を考えています。

    1.ほぼすべてのプリンターの印刷可能領域に対応できる範囲内での印刷とあらかじめしておく。
    2.印刷可能領域により、印刷を自動縮小できるようなプログラムをする。

    「1」については、すべてのプリンターの印刷可能領域を把握することが不可能なので、100%の対応は無理だとは
    思うのですが、ある程度の範囲内に印刷を納めるようにあらかじめプログラムをしておけばよいので、すぐにできます。

    「2」については、こちらが希望する動作なのですが、どのように手掛けてよいか悩み中です。
    (まだ、勉強中なのでもともとWordなどで作ってあった印刷見本の幅を測り、それを用いて位置を指定しています。
    なので、自動修正するとなると幅や高さなどは個別指定する必要はあると思うのですが、それぞれの項目の印字開始位置は
    プログラムで順次計算していく必要があるように思われます)

    みなさまは、プリンターにより印刷可能領域が異なる点にどのように対応していらっしゃるのでしょうか。

    アドバイスいただければ幸いです。

    2010年5月7日 19:28

回答

すべての返信

  • PageSettings.PrintableArea の値は使えないのでしょうか?
    http://msdn.microsoft.com/ja-jp/library/system.drawing.printing.pagesettings.printablearea.aspx

    PrintDocument.DefaultPageSettings から参照できます。


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答の候補に設定 山本春海 2010年5月13日 8:25
    • 回答としてマーク 山本春海 2010年5月27日 7:47
    2010年5月8日 12:19
  • ご回答ありがとうございます。

    たとえば、余白を上下左右 1cm とっていた場合で、PageSettings.PrintableAreaの値が 1.5cmだった場合は、
    全体として0.5mm分を調整するようにコードを記述する必要があるのですよね。

    Excelのように、1ページに収まるように印刷というオプションがあれば便利だなと思っているのですが、そんなに都合の
    よいものはないのですよね。

    2010年5月8日 18:33
  • >Excelのように、1ページに収まるように印刷というオプションがあれば便利だなと思っているのですが、そんなに都合の
    よいものはないのですよね。

    Graphics のワールド座標をいじれば似たようなことをできると思います。
    DpiX DpiY PageScale TransForm あたりですね。
    http://msdn.microsoft.com/ja-jp/library/system.drawing.graphics_members(v=VS.90).aspx

    親切な解説ページがありました。
    http://www.techch.com/wiki/index.php?%EF%BC%A3%EF%BC%83%E9%96%A2%E9%80%A3%2FWindows%20Form%2F%E5%BA%A7%E6%A8%99%E7%B3%BB%E3%81%A8%E5%A4%89%E6%8F%9B


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答の候補に設定 山本春海 2010年5月13日 8:25
    • 回答としてマーク 山本春海 2010年5月27日 7:47
    2010年5月9日 6:16
  • ご連絡が遅くなり、大変申し訳ありません。

    ご提示いただいた資料を読んでいるのですが、なかなか理解が追いつかず時間だけが過ぎております。
    もう少し、自分なりに考えてみたいと思いますので、その上で再度質問をさせていただきたいと思います。

    今しばらく、お時間を頂戴したいと思います。

    2010年5月17日 4:00
  • こんにちは、TI-cb400 さん。

    その後いかがでしょうか。
    有効な情報と思われる えむナウ さんの投稿に、私のほうで一旦回答としてマークさせていただきました。
    えむナウ さん、情報ありがとうございます。

    回答としてマークがついても、まだこのままご質問されるのは全然問題ありません。
    お時間がとれましたら、その後の状況もお知らせくださいね。それでは。
                                                                 
    マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2010年5月27日 7:54