如何在 vb.net 打印前调整图表大小
How to resize a chart before printing in vb.net
我想在我的 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
在我所有的尝试之后,我刚刚达到移动边距...这很好,但我仍然无法正确阅读我的图表...
有人遇到同样的问题并找到了解决方案吗?
----------------------------------------编辑---- --------------------------------
当我解释你的答案的评论时,我现在可以更改图表的位置和大小,但出现空白方块,我不知道为什么!
根据您发布的图片,您的问题似乎是 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
好的,我终于在这里找到了对我有用的东西,并根据我的情况对其进行了调整:Another Whosebug 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
希望它能帮助今天遇到和我一样麻烦的人...
我想在我的 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
在我所有的尝试之后,我刚刚达到移动边距...这很好,但我仍然无法正确阅读我的图表...
有人遇到同样的问题并找到了解决方案吗?
----------------------------------------编辑---- --------------------------------
当我解释你的答案的评论时,我现在可以更改图表的位置和大小,但出现空白方块,我不知道为什么!
根据您发布的图片,您的问题似乎是 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
好的,我终于在这里找到了对我有用的东西,并根据我的情况对其进行了调整:Another Whosebug 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
希望它能帮助今天遇到和我一样麻烦的人...