Vb.net Printing.PaperSize-从RichTextBox获取长字符串时宽度不正确。[vb]

Vb.net Printing.PaperSize-从RichTextBox获取长字符串时宽度不正确。[vb],vb.net,printing,richtextbox,Vb.net,Printing,Richtextbox,我的项目的一部分是RichTextBox,字符串长度为10到50个字符,字体大小为175-225,单行。我使用特殊的打印机:100毫米高,3000毫米(3米)宽的色带。很长的宽度是一个真正的问题 我的打印有问题。纸张大小宽度元素(我必须使用它)。它是(MSDN)“纸张的宽度,单位为百分之一英寸” 我试图从以下方面获得此信息: RichTextBox1.PreferredSize.Width g.MeasureString(RichTextBox1.Text, RichTextBox1.Font)

我的项目的一部分是
RichTextBox
,字符串长度为10到50个字符,字体大小为175-225,单行。我使用特殊的打印机:100毫米高,3000毫米(3米)宽的色带。很长的宽度是一个真正的问题

我的
打印有问题。纸张大小
宽度元素(我必须使用它)。它是(MSDN)“纸张的宽度,单位为百分之一英寸”

我试图从以下方面获得此信息:

RichTextBox1.PreferredSize.Width
g.MeasureString(RichTextBox1.Text, RichTextBox1.Font).Width
g.MeasureCharacterRanges(Text, Font, Rect, Format)
它们都给了我“像素”,但我不知道如何将其用于
打印。PaperSize
-它们都太短,并且依赖于使用的字体系列

棘手的是,我需要非常精确的
纸张大小的长度,因为我必须在字符串前后打印几个项目

当我只有元素的像素大小时,有没有办法估计打印宽度(以厘米/英寸为单位)


<>如果有人能在C语言或C++中给我任何答案,那没关系。我会很感激。

< p>你可以测量给定字体中字符串的宽度:

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
你建议的字体“lorem ipsum dolor sit amet”为90.75厘米(35.73英寸),这对我来说是合理的。如果您打算从中设置纸张尺寸的宽度,您当然需要至少3573百分之一英寸

如果要使文本适合特定的宽度,最好使用逐次逼近法,而不是直接计算,因为文本的字距可能取决于字体的大小

.SetResolution
在那里,如果您使用该代码构建输出,它对测量没有影响

(在.NET中的解析名称是错误的:它们应该是,例如,PpiX而不是DpiX等)


Ref:

图形对象具有.DpiX和.DpiY属性:。如果这不起作用,你可以打印已知数量的像素,然后用尺子测量结果。但是,我如何使用“.DpiX”和“RichTextBox”中的“String”呢?如果我尝试使用“DrawToBitmap”,我必须给出正确的位图大小?谢谢您的回答。(打印宽度)=(像素宽度)/(水平分辨率)。1英寸=25.4毫米。我知道,但我仍然不知道如何估计字符串。例如:“lorem ipsum dolor sit amet”的大小可以是多少英寸/厘米,字体是Times New Roman 225pt?谢谢。这正是我所需要的。这个项目还有一个问题——如果我不知道前面元素的大小,有没有方法让vb一件又一件地打印?我有问题-我的字符串后,我需要打印下一个,或从文件btm图形。我无法给出下一个元素打印的具体起点。@MarcinGoworek您应该能够找到所有元素的大小
.MeasureString
提供了一个
SizeF
结构,该结构还具有
.Height
属性。位图也有宽度和高度(以像素为单位)。“.MeasureString”不精确,当我使用它将gfx放在字符串后面时,它们太近或太宽(取决于字体)。但误差并不大,我想我能做到。非常感谢-如果没有您的帮助,我将永远不会结束此项目。@MarcinGoworek you's welcome:)您是否尝试过
g.textrendinghint
的任何替代值,以查看它们是否提供了更好的准确性?