0

我是这段代码来打印几块文本:

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 :-(

4

1 回答 1

1

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

排版师的偏好由可扩展的轮廓字体支持和 600 dpi 分辨率的激光打印机提供支持。请利用这一点,字体大小是浮点值,而不是整数。Graphics.ScaleTransform() 也可以。这可能是您应该更喜欢的,打印机引擎仍然受到机械公差的影响,因此您应该保留一个配置参数,用户可以对其进行调整以使其像素完美。

快速解决:

    new Font("Courier New", 11.72465f),
于 2014-06-27T13:53:13.333 回答