代码之家  ›  专栏  ›  技术社区  ›  bchu1392

使用MigraDoc将ZedGraph转换为PDF

  •  0
  • bchu1392  · 技术社区  · 10 年前

    我目前正在开发一个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页面上给了我一个稍微像素化的图像。我需要这个图表的质量非常高。所以,有什么我可以改变的提高质量,或我必须改变我的整个方法,这样的事情。

    提前非常感谢你。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    默认情况下 Bitmap 您创建的具有当前 屏幕分辨率 其可能低至 75dpi ,更常见 96dpi ; 更现代的显示器 120dpi 或更多,但良好的打印质量开始 150dpi .对于您想要的真正抄袭图像 300dpi 并允许缩放 600dpi 或更多。。

    因此,您需要创建并填充一个更大尺寸的位图,并控制其dpi分辨率。

    假设您的尺寸为 3.5f x 4.5f 单位为英寸 300 dpi 你需要一个 位图 具有 1050 x 1350 像素。

    所以你应该创建这样一个 位图 ..:

    Bitmap bmp = new Bitmap(1050, 1350);
    

    设置 分辨率:

    bmp.SetResolution(300, 300);
    

    要填充它,控件必须具有相同的大小:

    newGraph.ClientSize = bmp.Size;
    

    现在 DrawToBitmap 应该创建清晰且适合放大的图像。。

    请注意,控件是否太大而无法放在屏幕上并不重要; 绘制到位图 仍然有效。

    使现代化 除了足够的分辨率外,绘制高质量的线等也是很有意思的 抗锯齿 ,对于单个行:

    curve_x.Line.IsAntiAlias = true;
    

    或其他元件:

    myPane.XAxis.Scale.FontSpec.IsAntiAlias = true;
    

    或整个图表:

    zedGraphControl1.IsAntiAlias = true;
    

    所有示例均采用 from this post .