vb.net - 如何在 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
经过我所有的尝试,我刚刚达到了移动边距......这很好,但我仍然无法正确阅读我的图表......
有人遇到同样的问题并找到了解决方案吗?
- - - - - - - - - - - - - - - - - - - - 编辑 - - - - - ----------------------------
正如我解释你的答案的评论,我现在可以更改图表的位置和大小,但出现空白方块,我不知道为什么!
解决方案
根据您发布的图片,您的问题似乎是 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
推荐阅读
- ios - 使用 UITapGestureRecognizer 配置位置?
- html - 如何延迟关键帧动画
- c++ - Aeron 使用 RateSubscriber.cpp 从 CME UDP 多播获取费率
- python - Python 3.8.6 中的 ImportError
- compiler-errors - 在 C++ 中定义和使用 std::map 时出现编译错误
- c++ - 字符串擦除函数导致堆损坏
- swiftui - 更改焦点上 TextField 的样式(每个字段没有变量)
- python - 卡在这个问题中,无法理解子数组和的代码
- javascript - 为什么我的 Javascript 画布图像不移动我看不到错误
- python - 使用 python 在 .json 文件中存储数据的所有不同方法是什么?