【问题标题】:How to resize a chart before printing in vb.net如何在 vb.net 中打印之前调整图表大小
【发布时间】:2020-08-19 12:51:07
【问题描述】:

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

目前,我正在使用此代码:(在此处找到:Some msdn printing subject

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.net charts printing resize


    【解决方案1】:

    根据您发布的图片,您的问题似乎是 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
    

    【讨论】:

    • 首先非常感谢@G3nt_M3caj 的回答,我现在可以更改图表大小和位置,但出现一些空白方块,我不明白为什么!我将编辑我的帖子以向您展示,因为我不知道如何在这里执行...
    • 尝试评论这部分:“.Position.FromRectangleF(newP)”。它可能不仅仅需要调整区域大小,因为它会自行调整大小(所有图表控件)。如果它有效,您将评论与“.Position”相关的其他部分。祝你有美好的一天:)
    • 我试过了,空白方块消失了,但它不再调整大小了......我尝试了很多东西,包括通过手动设置位置来避免使用 rectangleF 但空白方块仍然在这里,我没有了解他们可以从哪里来!还是谢谢你,祝你有美好的一天! ;)
    【解决方案2】:

    好的,我终于在这里找到了适合我的东西,并根据我的情况进行了调整:Another Stackoverflow subject

    我让你在这里看到最终的图表:

    我添加了一个对话框来选择打印机并修改原始代码,如下所示:

    Private Sub BT_Print_Click(sender As Object, e As EventArgs) Handles BT_Print.Click
    
        Print_Preview()
    End Sub
    
    Public Sub Print_Preview()
        Dim Print_Doc As PrintDocument
        Print_Doc = Chart_Requis.Printing.PrintDocument
    
    
        AddHandler Print_Doc.PrintPage, New PrintPageEventHandler(AddressOf Print_Page)
    
        'SHEET PARAMETERS
        Print_Doc.DefaultPageSettings.Landscape = True
        Print_Doc.DefaultPageSettings.Margins = New Printing.Margins(0, 1, 1, 1)
        Print_Doc.DefaultPageSettings.Color = True
    
        'CHOOSING PRINTER AND OTHER PARAMETERS
        Dim Print_dlg As New PrintDialog
        Print_dlg.Document = Print_Doc
        Dim result As DialogResult = Print_dlg.ShowDialog()
    
        'IF DIALOGBOX OK THEN CONTINUE OTHERWISE NO
        If (result = DialogResult.OK) Then
    
            'PUT MARKERS TO THE RIGHT SIZE
            For i = 0 To Chart_Requis.Series.Count - 1
                Chart_Requis.Series(i).MarkerSize = 1
            Next
    
            'CHECKING BEFORE PRINTING
            Chart_Requis.Printing.PrintPreview()
        End If
    
    End Sub
    
    Private Sub Print_Page(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
        'DEFINI LA POSITION ET LA TAILLE DU GRAPHIQUE
        Dim chartPosition As New Rectangle(-70, -50, 2500, 2300)
        Chart_Requis.Printing.PrintPaint(ev.Graphics, chartPosition)
    End Sub
    

    希望今天能帮助遇到和我一样麻烦的人...

    【讨论】:

    • 嗨 Macros,现在是 8 月,我不时让我的孩子们在海里,所以很抱歉没有回复。我很高兴你找到了解决问题的方法(我希望这是暂时的,因为我不喜欢你的解决方案,甚至我的解决方案,还需要更多时间来考虑)。保持安全 ;) 绅士
    • 嗨@G3nt_M3caj,没问题,再次感谢您为我的主题付出的时间;)是的,它远非完美,但我真的根本不是专家^^。所以,现在它完成了这项工作,这对我来说已经是一件好事了!也祝你好运!
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 2012-09-25
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多