用紙サイズ、向きを変えた後に印刷領域を取得するには?

解決


mizuru  2012-08-18 12:55:57  No: 147747  IP: [192.*.*.*]

よろしくお願い致します。
プログラム内で印刷設定をA4,横にして印刷した時に印刷領域を取得したいの
ですが印刷設定の変更が反映されていないようです。
以下コード
        Dim pPaperSz As System.Drawing.Printing.PaperKind
        Dim pkSize As System.Drawing.Printing.PaperSize
        Dim setPaperSize As Boolean = False

        Debug.Print(PrintDocument3.DefaultPageSettings.PaperSize.Height.ToString & " " & PrintDocument3.DefaultPageSettings.PaperSize.Width.ToString)
        Debug.Print(PrintDocument3.DefaultPageSettings.PrintableArea.Height.ToString & " " & PrintDocument3.DefaultPageSettings.PrintableArea.Width.ToString)

        '### 印刷用紙サイズ設定 #######################################################
        pPaperSz = Printing.PaperKind.A4                   'A4 サイズの定数
        'サポートされている用紙サイズの一覧を取得
        For Each pkSize In PrintDocument3.PrinterSettings.PaperSizes
            '指定の用紙サイズがサポートされているか
            If pkSize.Kind = pPaperSz Then
                '指定の用紙サイズが見つかったら用紙サイズを設定する
                PrintDocument3.DefaultPageSettings.PaperSize = pkSize
                setPaperSize = True     '設定完了のフラグ
            End If
        Next
        '確認
        If setPaperSize = False Then
            MessageBox.Show("指定の用紙サイズが設定できませんでした。")
            Exit Sub
        End If

        '### 用紙方向横向き/縦向きで印刷 ################################################
        PrintDocument3.DefaultPageSettings.Landscape = True      '横向き

        Debug.Print(PrintDocument3.DefaultPageSettings.PaperSize.Height.ToString & " " & PrintDocument3.DefaultPageSettings.PaperSize.Width.ToString)
        Debug.Print(PrintDocument3.DefaultPageSettings.PrintableArea.Height.ToString & " " & PrintDocument3.DefaultPageSettings.PrintableArea.Width.ToString)
ここまで
印刷自体はA4,横で出来ているのですがDebugで表示した印刷領域が変更を
反映していないようで変更前と後で同じ数字になってしまします。
御教授お願い致します。

編集 削除
shu  2012-08-18 13:08:30  No: 147748  IP: [192.*.*.*]

Landscape = True
の設定をしても
PaperSizeのHeight,Widthが入れ替わったり
PrintableAreaのHeight,Widthが入れ替わったり
はしません。

PrintPageイベントでのe.MarginBoundsにより判断するのが
良いと思います。

編集 削除
mizuru  2012-08-18 17:12:34  No: 147749  IP: [192.*.*.*]

shu様ありがとうございます。
Landscape = Trueをしても変わらないのですね
e.MarginBoundsも調べたのですが余白がどうも大きすぎて上手くゆかず
以下のように印刷領域を取得してみました。
e.Graphics.TranslateTransform(PrintDocument3.DefaultPageSettings.HardMarginX * -1, PrintDocument3.DefaultPageSettings.HardMarginY * -1)

Dim X As Integer = PrintDocument1.DefaultPageSettings.HardMarginX
Dim Y As Integer = PrintDocument1.DefaultPageSettings.HardMarginY
Dim Width As Integer = e.Graphics.VisibleClipBounds.Width
Dim Height As Integer = e.Graphics.VisibleClipBounds.Height

少々斜め上な対処かもしれませんがとりあえず印刷領域を取得する事が
できました。ありがとうございました。

編集 削除