打印分辨率

时间:2014-12-30 00:11:45

标签: c# printing

我试图找出如何在PrintDocument上绘制形状以及以英寸为单位的特定尺寸的表格。我对PrintDocument

的DPI感到困惑

这就是我的开始:

 private void DrawShapes(Graphics graphics)
      {
         graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(1 * graphics.DpiX), (int)Math.Round(1 * graphics.DpiY)));
         graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(1.5 * graphics.DpiX), (int)Math.Round(1.5 * graphics.DpiY)));
         graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(2 * graphics.DpiX), (int)Math.Round(2 * graphics.DpiY)));
         graphics.DrawRectangle(new Pen(Color.HotPink), new Rectangle(0, 0, (int)Math.Round(2.5 * graphics.DpiX), (int)Math.Round(2.5 * graphics.DpiY)));
      }

      protected override void OnPaint(PaintEventArgs e)
      {
         base.OnPaint(e);

         DrawShapes(e.Graphics);
      }

      private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
      {
         DrawShapes(e.Graphics);
      }

这适用于Graphics函数中的OnPaint对象,但打印输出错误。我做了一些调试,发现来自Graphics事件的PrintPage对象的DPI很大(当我运行代码时为600),但页面的边界是850乘1100.所以我尝试使用打印时使用的DPI为100,并使用图形'绘制到表单时的DPI。这非常有效。

我不知道PrintDocument如何处理DPI。即使PrintDocument事件中的Graphics对象表示它具有不同的DPI,PrintPage的DPI总是为100吗?如果我在绘制到表单时假定为96dpi而在打印时假设为100dpi会不会遇到问题?

1 个答案:

答案 0 :(得分:1)

您在PrintPage事件处理程序中获得的Graphics对象已初始化,Graphics.PageUnit属性设置为GraphicsUnit.Display。这可确保您的输出缩放到打印机分辨率可能的任何值,您绘制的100'像素长的线将在纸上一英寸。如果您使用300或600 dpi打印机无关紧要。请注意850 x 1100的纸张尺寸为8.5 x 11英寸,在美国是标准的。

这个选择并非偶然,它接近显示器的默认dpi。因此,绘制到屏幕的代码也可用于绘制到打印机。即使打印机具有更高的分辨率,纸张尺寸也大致相同。很少有理由更改此设置。