Printing.PaperSize - 当我从RichTextBox获取长字符串时,宽度不正确。 [VB]

时间:2015-06-23 18:17:37

标签: vb.net printing richtextbox

我项目的一部分是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 ++给我任何答案并不重要 - 我将不胜感激。

1 个答案:

答案 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等。)

参考:Measure a String without using a Graphics object?