.NET PrintDocument无法正确打印等宽字体

时间:2014-06-27 11:36:28

标签: .net printing monospace

我是这段代码,用于打印几个文本块:

var doc=new PrintDocument();
 doc.PrintPage += (sender, e) => {
   e.Graphics.DrawString(
    "123456789 123456789 123456789 123456789 123456789 123456789 123456789 ", 
     new Font("Courier New", 12), 
     Brushes.Black, 0, 0);
   };
 doc.Print();

Courier New应该是10 CharsPerInch,所以每个块(包括空间)应该是2.54厘米长。打印时 - 无论在哪台打印机上,我测量的是13.1厘米,5块而不是12.7厘米。当我绘制1英寸宽的矩形时,我可以看到文本实际上比它应该更长,因此它不是一般的缩放问题,只是文本打印错误。

任何人都可以证实这一点,更重要的是告诉我一个方法吗?我需要文本正好是10 CPI,而不是经验丰富的10.3 CPI: - (

1 个答案:

答案 0 :(得分:1)

" 10 CPI"在上个世纪,点阵打印机仍占主导地位,这是有意义的。它成为了印刷工作者坚持获得完美字母形状的牺牲品,他们对此非常挑剔。当你在字符串上使用Graphics.MeasureString()时,Graphics类不会保密,当你看到它是7.164388英寸宽,而不是你希望的7.0。

印刷商的偏好由可扩展的轮廓字体支持和600 dpi分辨率的激光打印机提供支持。要利用这一点,字体大小是浮点值,而不是整数。 Graphics.ScaleTransform()也可以工作。这可能是你应该更喜欢的,打印机引擎仍然受到机械公差的限制,所以你应该保持一个配置参数,用户可以调整它以使其像素完美。

快速修复:

    new Font("Courier New", 11.72465f),