none
印刷について RRS feed

  • 質問

  • いつもお世話になります。

    VS2010 #C で下記の方法で印刷しましたが、右端の部分が一部印刷されないで欠けてしまいます。

    印刷用紙B5サイズの場合、PrintDocumen1のPrintableAreaはWidth=689 Height=980でしたので 、PictureBox1のSizeはPrintableAreaと同じにしました。

    HardMarginX=13.0 の分だけ欠けているように思うのですが、PrintableAreaはHardMarginXは除かれたサイズになっていなっていると思ったので、PictureBox1は

    全部印刷されると思っていましたが間違っているのでしょうか? 設定によって解決できるのでしょうか?

    教えてください。よろしくお願いいたします。

    private void 印刷_Click(object sender, EventArgs e)
            {
                printDocument1.DefaultPageSettings.Margins.Left = 0;
                printDocument1.Print();
            }

            private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
            {
                e.Graphics.DrawImage(pictureBox1.Image, e.MarginBounds.Left, e.MarginBounds.Top);
            }

    2011年9月16日 11:38

回答

  • PrintableArea は、「用紙に対して印刷が可能な範囲」をあらわしていて、「マージンや印刷方向」を考慮した印刷処理で描画できる範囲ではないようです。

    印刷処理で描画できる範囲は、既に PrintPage で利用されているようですが、MarginBounds です。

    たとえば、用紙を横にしても縦にしても用紙の大きさはかわらないので、PrintableArea は常に同じ値を返します。実際に印刷が可能な範囲は、横置きなら横長に縦置きなら縦長になっていて、それを取得できるのが MarginBounds になります。

    2011年9月17日 8:36

すべての返信

  • PrintableArea は、「用紙に対して印刷が可能な範囲」をあらわしていて、「マージンや印刷方向」を考慮した印刷処理で描画できる範囲ではないようです。

    印刷処理で描画できる範囲は、既に PrintPage で利用されているようですが、MarginBounds です。

    たとえば、用紙を横にしても縦にしても用紙の大きさはかわらないので、PrintableArea は常に同じ値を返します。実際に印刷が可能な範囲は、横置きなら横長に縦置きなら縦長になっていて、それを取得できるのが MarginBounds になります。

    2011年9月17日 8:36
  • どうもありがとうございました。

    誤っていたようです。HardmarginXを考慮してやり直します。

    2011年9月19日 5:16