语言: 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可以改善结果。然而使用它时,结果似乎被某个未知缩放因子从原始大小缩小了......
下面是覆盖在原始图像上的结果:
(0,0)
开始,但不是在打印机上。检查打印矩形的.Left
和.Top
属性,并相应地偏移文本。 - John Alexiou