首页 > 解决方案 > 如何在 vb.net 中打印之前调整图表大小

问题描述

我想在我的 vb.net 应用程序中打印一个图表,但是当我打印它时,它非常小,我找不到如何调整它的大小。

现在,我正在使用这段代码:(在这里找到:一些 msdn 打印主题

Private Sub BT_Print_Click(sender As Object, e As EventArgs) Handles BT_Print.Click
    Dim pdS As New PrintDocument()

    AddHandler pdS.PrintPage, AddressOf pds_PrintPage
    pdS.DefaultPageSettings.Landscape = True

    Dim PrintDialog1 As New PrintPreviewDialog
    PrintDialog1.Document = pdS

    If (PrintDialog1.ShowDialog = DialogResult.OK) Then
        Chart_Requis.Printing.PrintDocument.DefaultPageSettings.Landscape = True
        pdS.Print()
End If

End Sub

Private Sub pds_PrintPage(sender As Object, ev As PrintPageEventArgs)
    Dim chartPosition As New Rectangle(1, 1, ev.MarginBounds.Width, ev.MarginBounds.Height)

    Chart_Requis.Printing.PrintPaint(ev.Graphics, chartPosition)
End Sub

经过我所有的尝试,我刚刚达到了移动边距......这很好,但我仍然无法正确阅读我的图表......

有人遇到同样的问题并找到了解决方案吗?

这是它在预览中的显示方式

- - - - - - - - - - - - - - - - - - - - 编辑 - - - - - ----------------------------

正如我解释你的答案的评论,我现在可以更改图表的位置和大小,但出现空白方块,我不知道为什么!

在此处输入图像描述

标签: vb.netchartsprintingresize

解决方案


根据您发布的图片,您的问题似乎是 ChartArea 而不是 Chart Control。您需要增加图表区域的面积。在下面的示例中(可以帮助您),我使用了两个参数 scaleX 和 scaleY 。您可以对这两个进行处理,以找到合适的打印尺寸。请注意:作为示例中的图表区域,我使用了您的第一个图表控件,但是,您可以使用另一个按名称调用它。希望就是你所需要的。

Private Sub BT_Print_Click(sender As Object, e As EventArgs) Handles BT_Print.Click


    Using pdS As New PrintDocument()

        Dim scaleX As Single = 1.5
        Dim scaleY As Single = 1.2

        With pdS.DefaultPageSettings
            .Landscape = True
            .Margins = New Margins(10, 10, 10, 10)
        End With

        Chart_Requis.Printing.PrintDocument = pdS

        AddHandler pdS.PrintPage, Sub(obj As Object, ev As PrintPageEventArgs)
                                      Using ev.Graphics
                                          With Chart_Requis.ChartAreas.FirstOrDefault

                                              Dim initialP As DataVisualization.Charting.ElementPosition = .Position

                                              Dim newP As Rectangle = New Rectangle With {
                                              .X = CInt(initialP.X),
                                              .Y = CInt(initialP.Y),
                                              .Width = CInt(initialP.Width * scaleX),
                                              .Height = CInt(initialP.Height * scaleY)
                                              }

                                              .Position.FromRectangleF(newP)

                                              Chart_Requis.Printing.PrintPaint(ev.Graphics, ev.MarginBounds)

                                              .Position = initialP

                                          End With
                                      End Using
                                  End Sub

        Using PrintDialog1 As New PrintPreviewDialog With {
            .Document = pdS
        }

            If (PrintDialog1.ShowDialog = DialogResult.OK) Then
                pdS.Print()
            End If
        End Using

    End Using


End Sub

推荐阅读