相关疑难解决方法(0)

为什么Graphics.MeasureString()返回高于预期的数字?

我正在生成一个收据,并使用Graphics对象调用DrawString方法打印出所需的文本.

graphics.DrawString(string, font, brush, widthOfPage / 2F, yPoint, stringformat);
Run Code Online (Sandbox Code Playgroud)

这适用于我需要它做的事情.我总是知道我要打印出来的东西,所以我可以手动修剪任何琴弦,这样它就可以正确地放在80毫米的收据纸上.然后我不得不添加额外的功能,这将使这更灵活.用户可以传入将添加到底部的字符串.

由于我不知道他们要放什么,我只是创建了自己的自动换行功能,它包含了许多字符来包装和字符串本身.为了找出字符数,我做了这样的事情:

float width = document.DefaultPageSettings.PrintableArea.Width;
int max = (int)(width / graphics.MeasureString("a", font).Width);
Run Code Online (Sandbox Code Playgroud)

现在宽度正在返回283,以mm为单位约为72,这在80mm纸张上考虑边距时是有意义的.

但MeasureString方法在Courier New 8pt字体上返回10.5.因此,不是绕过我期望的36 - 40,我得到26,导致2行文本变成3-4.

PrintableArea.Width的单位是1/100英寸,图形对象的PageUnit是Display(对于打印机来说通常是1/100英寸).那么为什么我只回来26?

c# printdocument measurement

46
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×1

measurement ×1

printdocument ×1