. net PrintDocument不能正确打印等宽字体



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

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 cm长。当打印它时——不管在哪个打印机上,我的5块尺寸是13.1厘米,而不是12.7厘米。当我绘制宽度为1英寸的矩形时,我可以看到文本实际上比它应该的长,所以这不是一般的缩放问题,只是文本打印错误。

谁能证实这一点,更重要的是告诉我一个方法?我需要的文本正好是10 CPI,而不是10.3 CPI经验:-(

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

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

快速修复:

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

最新更新