none
B4サイズをA4サイズに縮小印刷 RRS feed

  • 質問

  • お世話になります。

    A4用紙の印刷で、B4サイズをA4サイズに縮小印刷したいです。

    プログラム方法を教えてくださいませ。

    2016年11月17日 9:27

すべての返信

  • おそらく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!)

    2016年11月17日 11:06
  • すみません。

    Window Formで、文字を印刷しています。

    pd.PrintParameters.PrintDocument.DefaultPageSetting

    などで、縮小率(パーセント)を設定するプロパティはないでしょうか?

    (プリンタドライバに縮小率を設定するイメージです)

    ないということですと、APIで実現するのでしょうか?

    (できればその方法も教えてくださると幸いです)

    よろしく、お願い致します

    2016年11月18日 2:17