よろしくお願い致します。
プログラム内で印刷設定を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で表示した印刷領域が変更を
反映していないようで変更前と後で同じ数字になってしまします。
御教授お願い致します。
Landscape = True
の設定をしても
PaperSizeのHeight,Widthが入れ替わったり
PrintableAreaのHeight,Widthが入れ替わったり
はしません。
PrintPageイベントでのe.MarginBoundsにより判断するのが
良いと思います。
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
少々斜め上な対処かもしれませんがとりあえず印刷領域を取得する事が
できました。ありがとうございました。
ツイート | ![]() |