我正在生成一个收据,并使用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?