【发布时间】:2020-08-20 20:39:19
【问题描述】:
在 Windows 10/.NET 4.8/Winforms 中针对表示打印机设备的图形对象测量字符串时,我得到了意想不到的结果:
var doc = new PrintDocument
{
PrinterSettings = new PrinterSettings
{
PrinterName = "Microsoft Print to PDF",
PrintToFile = true,
PrintFileName = "c:\\temp\\test.pdf"
}
};
doc.PrintPage += (object sender, PrintPageEventArgs e) =>
{
var font = new Font("Verdana", 8, FontStyle.Regular);
var format = new StringFormat
{
Alignment = StringAlignment.Near,
FormatFlags = StringFormatFlags.LineLimit,
LineAlignment = StringAlignment.Near,
Trimming = StringTrimming.Word,
HotkeyPrefix = HotkeyPrefix.None
};
var text = "0ZG0XLLJ620";
var size = e.Graphics.MeasureString(text, font, new SizeF(300, 1000000), format);
size = e.Graphics.MeasureString(text, font, new SizeF(size.Width, 1000000), format);
e.Cancel = true;
};
doc.Print();
在第二次调用 MeasureString 时,size 的高度分量变大,而宽度变小。两个调用的返回大小不应该相同,尤其是因为第二个调用已经传递了足够宽以容纳文本的可用空间?
注意,这在 Windows7 中不会发生。事实上,您可以通过使用 Windows 7 中的 Verdana 覆盖 Windows 10 Verdana 来解决此问题。
【问题讨论】:
标签: c# .net winforms graphics windows-10