使用 MigraDoc 将 ZedGraph 转为 PDF
ZedGraph to PDF using MigraDoc
我目前正在开发一个 C# 应用程序,旨在在 pdf 文件中进行一些计算和输出图表。
我使用 Zedgraph 库来绘制我的图表,比如 graphPane.AddCurve(PointPairList)。现在我尝试通过 MigraDoc 包将这些图表输出到 pdf 文件。
目前,我有一个脚本可以将 Zedgraph 映射到位图,然后将其粘贴到 pdf 文件中。所以像这样:
private Bitmap getBitMap()
{
ZedGraphControl graph = new ZedGraphControl();
newGraph = graphPane.Clone();
SizeF s = new SizeF(3.5f, 4.5f);
newGraph.Scale(s);
newGraph.DrawToBitmap(bit, new Rectangle(0, 0, newGraph.Width, newGraph.Height));
return bit;
}
问题是这会在 pdf 页面上给我一个略微像素化的图像。我需要这张图的质量非常高。那么有什么我可以改变以提高质量,或者我必须改变我的整个方法吗?
在此先感谢您。
默认情况下,您创建的 Bitmap
的当前 屏幕分辨率 可能低至 75dpi
,更常见的 96dpi
;更现代的显示器有 120dpi
或更多,但良好的打印质量开始 150dpi
。对于你想要 300dpi
并且允许缩放的真实图像,你可能需要 600dpi
或更多..
因此您需要创建并填充更大尺寸的位图并控制其 dpi 分辨率。
假设 3.5f x 4.5f
的尺寸是英寸,对于 300dpi
,您需要 Bitmap
和 1050 x 1350
像素。
所以你应该创建这样一个 Bitmap
..:[=31=]
Bitmap bmp = new Bitmap(1050, 1350);
..和设置分辨率:
bmp.SetResolution(300, 300);
要填充它,您的控件必须具有相同的大小:
newGraph.ClientSize = bmp.Size;
现在 DrawToBitmap
应该创建清晰且适合放大的图像..
请注意,如果控件太大而无法显示在屏幕上也没关系; DrawToBitmap
仍然有效。
更新 除了足够的分辨率之外,绘制高质量的线条等也很有趣。ZedGraph 的一个特点是可以打开 抗锯齿,对于单独的行:
curve_x.Line.IsAntiAlias = true;
或其他元素:
myPane.XAxis.Scale.FontSpec.IsAntiAlias = true;
或整个图表:
zedGraphControl1.IsAntiAlias = true;
所有例子都取from this post.
我目前正在开发一个 C# 应用程序,旨在在 pdf 文件中进行一些计算和输出图表。
我使用 Zedgraph 库来绘制我的图表,比如 graphPane.AddCurve(PointPairList)。现在我尝试通过 MigraDoc 包将这些图表输出到 pdf 文件。
目前,我有一个脚本可以将 Zedgraph 映射到位图,然后将其粘贴到 pdf 文件中。所以像这样:
private Bitmap getBitMap()
{
ZedGraphControl graph = new ZedGraphControl();
newGraph = graphPane.Clone();
SizeF s = new SizeF(3.5f, 4.5f);
newGraph.Scale(s);
newGraph.DrawToBitmap(bit, new Rectangle(0, 0, newGraph.Width, newGraph.Height));
return bit;
}
问题是这会在 pdf 页面上给我一个略微像素化的图像。我需要这张图的质量非常高。那么有什么我可以改变以提高质量,或者我必须改变我的整个方法吗?
在此先感谢您。
默认情况下,您创建的 Bitmap
的当前 屏幕分辨率 可能低至 75dpi
,更常见的 96dpi
;更现代的显示器有 120dpi
或更多,但良好的打印质量开始 150dpi
。对于你想要 300dpi
并且允许缩放的真实图像,你可能需要 600dpi
或更多..
因此您需要创建并填充更大尺寸的位图并控制其 dpi 分辨率。
假设 3.5f x 4.5f
的尺寸是英寸,对于 300dpi
,您需要 Bitmap
和 1050 x 1350
像素。
所以你应该创建这样一个 Bitmap
..:[=31=]
Bitmap bmp = new Bitmap(1050, 1350);
..和设置分辨率:
bmp.SetResolution(300, 300);
要填充它,您的控件必须具有相同的大小:
newGraph.ClientSize = bmp.Size;
现在 DrawToBitmap
应该创建清晰且适合放大的图像..
请注意,如果控件太大而无法显示在屏幕上也没关系; DrawToBitmap
仍然有效。
更新 除了足够的分辨率之外,绘制高质量的线条等也很有趣。ZedGraph 的一个特点是可以打开 抗锯齿,对于单独的行:
curve_x.Line.IsAntiAlias = true;
或其他元素:
myPane.XAxis.Scale.FontSpec.IsAntiAlias = true;
或整个图表:
zedGraphControl1.IsAntiAlias = true;
所有例子都取from this post.