質問者
B4サイズをA4サイズに縮小印刷

質問
すべての返信
-
おそらくWindows Formsだとして回答してみる
(違う場合は印刷したい方法についてWPFなのかCrystalReportなのか、それとも他の方法なのかなどを説明するようにしてください)
e.Graphicsで描画を開始する前にScaleTransformを行うことで拡大縮小変形されるようになります。
Public Class Form1 Sub New() ' この呼び出しはデザイナーで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 Dim printButton = New Button() printButton.Text = "Test" AddHandler printButton.Click, AddressOf PrintButton_Click Me.Controls.Add(printButton) SelectComboBox = New ComboBox() SelectComboBox.Items.Add(Printing.PaperKind.B4) SelectComboBox.Items.Add(Printing.PaperKind.A4) SelectComboBox.Items.Add(Printing.PaperKind.A5) SelectComboBox.SelectedIndex = 0 SelectComboBox.Left = printButton.Width Me.Controls.Add(SelectComboBox) Me.Width = 300 Me.Height = 100 End Sub Private Sub PrintButton_Click(sender As Object, e As EventArgs) Dim document = New System.Drawing.Printing.PrintDocument() document.DefaultPageSettings.PaperSize.RawKind = Printing.PaperKind.B4 '用紙としてB4に印刷 document.PrintController = New System.Drawing.Printing.StandardPrintController() AddHandler document.PrintPage, AddressOf PrintDocument_PrintPage Dim dlg As New PrintPreviewDialog dlg.Document = document dlg.Show() End Sub Private Sub PrintDocument_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Dim p As New System.Drawing.Printing.PrinterSettings() Dim sizeTarget As SizeF '出力したい用紙の大きさ Dim sizeOriginal As SizeF '元の用紙の大きさ For Each ps As System.Drawing.Printing.PaperSize In New System.Drawing.Printing.PrinterSettings().PaperSizes Dim kind As System.Drawing.Printing.PaperKind = CType(ps.Kind, System.Drawing.Printing.PaperKind) If (kind = Me.SelectComboBox.SelectedItem) Then sizeTarget = New SizeF(ps.Width, ps.Height) End If If (kind = System.Drawing.Printing.PaperKind.B4) Then sizeOriginal = New SizeF(ps.Width, ps.Height) '元の大きさはB4 End If Next Dim state = e.Graphics.Save()’変形前の状態を保存 '大きさの比を計算 Dim scale As Single = CType(sizeTarget.Width / sizeOriginal.Width, Single) '大きさの比で拡縮変形するように指定 e.Graphics.ScaleTransform(scale, scale) '以降の描画処理は変形が反映される '用紙の大きさに無関係に元の大きさで描画したものがScaleTransformによって拡大縮小がされます e.Graphics.DrawRectangle(Pens.Black, 50, 50, e.PageBounds.Width - 100, e.PageBounds.Height - 100) e.Graphics.DrawString(Me.SelectComboBox.Text, New Font(Me.Font.FontFamily, 50), Brushes.Black, 100, 100) e.Graphics.Restore(state) '変形を解除 e.HasMorePages = False End Sub End Class
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)