Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
MsgBox(Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width & "," & e.Graphics.MeasureString("ABC打印测试", Me.Font).Width)
End Sub
15 个解决方案
#1
UP UP UP
有没有微软的工程师啊,这个问题我今天在VS2005上试了一下,依然存在这个问题
有没有微软的工程师啊,这个问题我今天在VS2005上试了一下,依然存在这个问题
#2
学习
#3
Graphics和Device Contexts关联的,不同DC出来的结果可能不一样吧.
好像DC里面有关于字符宽度这类的描述,不过具体我不清楚...
好像DC里面有关于字符宽度这类的描述,不过具体我不清楚...
#4
好奇怪哦。up一下
#5
有没有办法忽律或者修正这种误差呢???
#6
最头疼的是这个误差不是恒定的,计算不同的字符串得出的误差不一样
例如"ABC打印测试" 的误差和"ABC打印测试ABC"或者"打印测试"的误差都不一样啊~~~
例如"ABC打印测试" 的误差和"ABC打印测试ABC"或者"打印测试"的误差都不一样啊~~~
#7
不同的字符肯定有时会不一样啦
相同的倒没有试过
相同的倒没有试过
#8
Me.CreateGraphics是当前类(WinForm?)的Graphics对象,
而e.Graphics是打印文档的Graphics对象,是两个不同的对象。
如果它们的FontSize和Font Family等等不同,Measure后肯定不一样嘛
而e.Graphics是打印文档的Graphics对象,是两个不同的对象。
如果它们的FontSize和Font Family等等不同,Measure后肯定不一样嘛
#9
Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width
e.MeasureString("ABC打印测试", Me.Font).Width
同意楼上,刚才试过
e.MeasureString("ABC打印测试", Me.Font).Width
同意楼上,刚才试过
#10
唉,你们看清楚我的代码没有,我的对比都是测试同一个字符串,使用同样的参数的啊
说比例不恒定是对于同样的的参数下测试的,例如"ABC打印测试"比例是1.041,但测试"ABC打印测试ABC"比例就变成1.044了,如果没办法得到相同的长度,起码比例都要恒定嘛!!!
说比例不恒定是对于同样的的参数下测试的,例如"ABC打印测试"比例是1.041,但测试"ABC打印测试ABC"比例就变成1.044了,如果没办法得到相同的长度,起码比例都要恒定嘛!!!
#11
但是你用的是CreateGraphics类与System.Drawing.Printing.PrintPageEventArgs.Graphics类呀
你用MsgBox(Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width & "," & Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width)怎么会不一样?
你用MsgBox(Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width & "," & Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width)怎么会不一样?
#12
楼上说的不是废话吗,这个我当然知道一样啦,我现在就是需要不同的Graphics也想达到一样的长度,就算不是一样,起码长度比例是恒定的,我现在就是寻找这样的解决办法嘛!!!
#13
主要是两者的PageUnit不一致,他们默认的设置都是GraphicsUnit.Display,该默认设置对于不同的设备值是不一样,就如打印机和显示器单位实际值是不一样的,所以你测试出来的长度是不一样的。你可以将PageUnit设置成GraphicsUnit.Inch或其他单位,应该测试出来的是一样的。
#14
MSDN里给出的GraphicsUnit.Display的解释为:将 1/75 英寸指定为度量单位。
这是个明显的错误。
应该参考(GDI+)中这一段:
UnitDisplay
Specifies display units. For example, if the display device is a monitor, then the unit is 1 pixel.
这是个明显的错误。
应该参考(GDI+)中这一段:
UnitDisplay
Specifies display units. For example, if the display device is a monitor, then the unit is 1 pixel.
#15
呵呵,楼上的是正解,我就是需要这个答案,无以为报,只能给分你了
#1
UP UP UP
有没有微软的工程师啊,这个问题我今天在VS2005上试了一下,依然存在这个问题
有没有微软的工程师啊,这个问题我今天在VS2005上试了一下,依然存在这个问题
#2
学习
#3
Graphics和Device Contexts关联的,不同DC出来的结果可能不一样吧.
好像DC里面有关于字符宽度这类的描述,不过具体我不清楚...
好像DC里面有关于字符宽度这类的描述,不过具体我不清楚...
#4
好奇怪哦。up一下
#5
有没有办法忽律或者修正这种误差呢???
#6
最头疼的是这个误差不是恒定的,计算不同的字符串得出的误差不一样
例如"ABC打印测试" 的误差和"ABC打印测试ABC"或者"打印测试"的误差都不一样啊~~~
例如"ABC打印测试" 的误差和"ABC打印测试ABC"或者"打印测试"的误差都不一样啊~~~
#7
不同的字符肯定有时会不一样啦
相同的倒没有试过
相同的倒没有试过
#8
Me.CreateGraphics是当前类(WinForm?)的Graphics对象,
而e.Graphics是打印文档的Graphics对象,是两个不同的对象。
如果它们的FontSize和Font Family等等不同,Measure后肯定不一样嘛
而e.Graphics是打印文档的Graphics对象,是两个不同的对象。
如果它们的FontSize和Font Family等等不同,Measure后肯定不一样嘛
#9
Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width
e.MeasureString("ABC打印测试", Me.Font).Width
同意楼上,刚才试过
e.MeasureString("ABC打印测试", Me.Font).Width
同意楼上,刚才试过
#10
唉,你们看清楚我的代码没有,我的对比都是测试同一个字符串,使用同样的参数的啊
说比例不恒定是对于同样的的参数下测试的,例如"ABC打印测试"比例是1.041,但测试"ABC打印测试ABC"比例就变成1.044了,如果没办法得到相同的长度,起码比例都要恒定嘛!!!
说比例不恒定是对于同样的的参数下测试的,例如"ABC打印测试"比例是1.041,但测试"ABC打印测试ABC"比例就变成1.044了,如果没办法得到相同的长度,起码比例都要恒定嘛!!!
#11
但是你用的是CreateGraphics类与System.Drawing.Printing.PrintPageEventArgs.Graphics类呀
你用MsgBox(Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width & "," & Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width)怎么会不一样?
你用MsgBox(Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width & "," & Me.CreateGraphics.MeasureString("ABC打印测试", Me.Font).Width)怎么会不一样?
#12
楼上说的不是废话吗,这个我当然知道一样啦,我现在就是需要不同的Graphics也想达到一样的长度,就算不是一样,起码长度比例是恒定的,我现在就是寻找这样的解决办法嘛!!!
#13
主要是两者的PageUnit不一致,他们默认的设置都是GraphicsUnit.Display,该默认设置对于不同的设备值是不一样,就如打印机和显示器单位实际值是不一样的,所以你测试出来的长度是不一样的。你可以将PageUnit设置成GraphicsUnit.Inch或其他单位,应该测试出来的是一样的。
#14
MSDN里给出的GraphicsUnit.Display的解释为:将 1/75 英寸指定为度量单位。
这是个明显的错误。
应该参考(GDI+)中这一段:
UnitDisplay
Specifies display units. For example, if the display device is a monitor, then the unit is 1 pixel.
这是个明显的错误。
应该参考(GDI+)中这一段:
UnitDisplay
Specifies display units. For example, if the display device is a monitor, then the unit is 1 pixel.
#15
呵呵,楼上的是正解,我就是需要这个答案,无以为报,只能给分你了