[英]Winform - Label Printing?
我正在一个需要打印从1“ x3”到8“ x10”的标签的应用程序上工作。 将在xml文件中定义将在标签上打印的文本和图像,该xml文件包含所有必需的信息,包括其在标签上的位置(如左上角xy坐标所定义)。 我不想预览打印作业,只需按命令将其发送到打印机即可。 我的问题是,执行此操作的首选方法是什么?
我玩弄了2种不同的方法。
方法一:读取xml并在表单上找到项目,创建表单的图像,然后进行打印。 这可行,但似乎有点胡扯?? 我必须显示表单一秒钟才能创建图像,我真的不想这样做。
方法二:我研究了使用MigraDoc创建标签文档,然后将其发送到打印机。 这种方法将创建表格并将其发送给打印机而不显示,但是,我看不到如何根据xy坐标在文档中定位项目? 也许我在这里错过了一些东西,但是所有内容似乎都是由段落和段落驱动的。
最佳/最简单的方法是什么?
您可以使用System.Drawing
命名空间中的功能将文本和图像直接绘制到位图,因此不必显示表单。
Dim bm As Bitmap = New Bitmap(200, 200)
Dim gr As Graphics = Graphics.FromImage(bm)
Dim img As Image = Image.FromFile("image.jpg")
gr.DrawImage(img, x, y)
Dim fn As Font = New Font("Comic Sans MS",72)
Dim solidBlack As SolidBrush = New SolidBrush(Color.Black)
gr.DrawString("My Picture", fn, solidBlack, x, y)
然后使用位图bm
,保存,打印等等。
其他一些示例, http://www.websupergoo.com/helppdf9net/source/4-examples/20-systemdrawing.htm
编辑:我不记得我上次使用它时如何克服文本质量问题,但是我确实在代码中设置了这些东西。
gr.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
gr.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
gr.CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality
重新方法二:
使用MigraDoc,您可以使用TextFrames使用XY坐标来定位项目。 文本框可能会重叠,如果您使用此方法,则有责任确保所有内容都适合指定区域。
使用MigraDoc的更好方法是使用具有精确高度或间距的表和/或段落。 但是,在您使用带有坐标的XML文件的方法时,这不容易使用,因为间距必须相对于上一项。
您可以使用PDFsharp创建一个PDF文件,该文件在正确的位置绘制所有内容。 但是打印可能会成为一个问题-您可以调用Adobe Reader传递命令行参数来自动打印,但不能设置复杂的打印机选项。 如果仅创建少量打印作业,而手动干预不是问题,则可以选择这样做(并且PDF文件允许在打印之前对文档进行视觉检查)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.