使用 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,您需要 Bitmap1050 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.