我项目的一部分是RichTextBox
,字符串长度为10到50个字符,字体的大小为175-225(单行)。我使用特殊打印机:100毫米高,3000毫米(3米)宽的色带。很长的宽度是一个真正的问题。
我遇到Printing.PaperSize
宽度元素的问题(我必须使用它)。它的(MSDN)"纸张的宽度,以百分之一英寸为单位。
我试图从中获取:
RichTextBox1.PreferredSize.Width
g.MeasureString(RichTextBox1.Text, RichTextBox1.Font).Width
g.MeasureCharacterRanges(Text, Font, Rect, Format)
所有这些都给了我"像素"但我不知道如何将它与Printing.PaperSize
一起使用 - 所有这些都太短,并且依赖于使用的字体系列。
棘手的部分是我需要非常精确的PaperSize
长度,因为我必须在字符串之前和之后打印几个项目。
当我只有像素尺寸的元素时,有没有办法估算打印宽度(厘米/英寸)?
如果有人能用C#或C ++给我任何答案并不重要 - 我将不胜感激。
答案 0 :(得分:0)
您可以使用给定字体测量字符串的宽度:
Sub ShowWidthOfText(s As String)
Using img As New Bitmap(1, 1)
img.SetResolution(300, 300)
Using f As New Font("Times New Roman", 225, GraphicsUnit.Point)
Using g = Graphics.FromImage(img)
g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
Dim w = g.MeasureString(s, f)
MessageBox.Show(String.Format("{0} pixels = {1:N2} cm at {2} ppi", w.Width, w.Width * 2.54 / g.DpiX, g.DpiX))
End Using
End Using
End Using
End Sub
给出了90.75厘米(35.73英寸)的" lorem ipsum dolor sit amet"用你建议的字体,这对我来说似乎是合理的。如果您打算设置纸张尺寸的宽度,那么您当然需要至少3573个百分之一英寸。
如果要将文本拟合到特定宽度,最好使用逐次逼近方法而不是直接计算,因为文本的字距可能取决于字体的大小。
如果您使用该代码构建输出,.SetResolution
就在那里,它对测量没有任何影响。
(.NET中的分辨率名称是错误的:它们应该是,例如PpiX而不是DpiX等。)