我是这段代码,用于打印几个文本块:
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: - (
答案 0 :(得分:1)
" 10 CPI"在上个世纪,点阵打印机仍占主导地位,这是有意义的。它成为了印刷工作者坚持获得完美字母形状的牺牲品,他们对此非常挑剔。当你在字符串上使用Graphics.MeasureString()时,Graphics类不会保密,当你看到它是7.164388英寸宽,而不是你希望的7.0。
印刷商的偏好由可扩展的轮廓字体支持和600 dpi分辨率的激光打印机提供支持。要利用这一点,字体大小是浮点值,而不是整数。 Graphics.ScaleTransform()也可以工作。这可能是你应该更喜欢的,打印机引擎仍然受到机械公差的限制,所以你应该保持一个配置参数,用户可以调整它以使其像素完美。
快速修复:
new Font("Courier New", 11.72465f),