语言: VB .NET 2010 Win Form
范围: 我开发了一个标签打印程序,旨在将自定义标签打印到斑马打印机。当我尝试将整个标签打印为图像时,打印机的清晰度出现问题,因此我尝试将标签中的所有文本存储到数组中,清除标签,将剩余图像发送到打印机,然后根据存储的数组覆盖新文本。此结果旨在将文本而不是图像发送到打印机。
问题: 生成的标签对于我想要的文本非常清晰,但是我在打印方法的对齐方面遇到了麻烦。对于测试,我将原始图像与顶部的覆盖文本一起显示,它们应该完全对齐或在合理范围内接近。这样做的结果是它们没有对齐。
测试:
Dim g2 As Graphics
g2 = Form1.PictureBox2.CreateGraphics
g2.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g2.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
g2.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g2.Clear(Color.White)
g2.DrawImage(largeimage, New Point(0, 0))
Dim myBrush As Brush
Dim i As Integer = 0
Do Until i = label_array.Count - 1
myBrush = New SolidBrush(label_array(i).ForeColor)
g2.DrawString(label_array(i).Text, label_array(i).Font, myBrush, label_array(i).Location)
i = i + 1
Loop
在打印方法中,我使用上述方法将叠加层和图像输出到图片框。这样做时,它可以工作,但是......
e.Graphics.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
e.Graphics.Clear(Color.White)
e.Graphics.DrawImage(largeimage, New Point(0, 0))
i = 0
Do Until i = label_array.Count - 1
myBrush = New SolidBrush(label_array(i).ForeColor)
e.Graphics.DrawString(label_array(i).Text, label_array(i).Font, myBrush, label_array(i).Location)
i = i + 1
Loop
..对上面显示的打印图形执行此操作会导致错位...
欢迎任何想法,因为我会尝试任何事情。我猜测打印图形正在做一些我不知道的普通图形的附加操作。
我确实注意到 TextRenderer.DrawText 与 DrawString 相比改进了结果。然而,当使用这个时,结果似乎是从原始的一些未知的比例因子缩放...
下面是原始顶部的结果叠加层: