我正在开发一个应用程序,我需要打印从1“x3”到8“x10”的标签。将在标签上打印的文本和图像在xml文件中定义,该文件包含所有需要的信息,包括其在标签上的位置,由左上角的xy坐标定义。我不想预览打印作业,只需将命令发送到打印机即可。我的问题是,这样做的首选方法是什么?
我玩弄了两种不同的方法。
方法一: 读取xml并在表单上查找项目,创建表单图像然后打印它。这有效,但它似乎有点ho ??我必须显示表单一秒钟来创建图像,我真的不想这样做。
方法二: 我已经研究过使用MigraDoc创建标签文档然后将其发送到打印机。这种方法将创建表单并将其发送到打印机而不显示,但是,我看不出如何根据xy坐标找到文档中的项目?也许我在这里错过了一些东西,但一切似乎都是段落和段落驱动。
实现这一目标的最佳/最简单方法是什么?
答案 0 :(得分:1)
您可以使用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
答案 1 :(得分:0)
Re方法二:
使用MigraDoc,您可以使用TextFrames使用XY坐标定位项目。文本框架可以重叠,如果您使用此方法,您有责任确保所有内容都适合指定区域。
使用MigraDoc的更好方法是使用具有精确高度或间距的表格和/或段落。但是,对于使用带坐标的XML文件的方法,这不能轻易使用,因为间距必须与前一项相关。
您可以使用PDFsharp创建一个PDF文件,在正确的位置绘制所有内容。但是打印可能是个问题 - 您可以调用Adobe Reader传递命令行参数来自动打印,但是您无法设置复杂的打印机选项。如果只创建少量打印作业并且手动干预不是问题,则可以选择此选项(PDF文件允许在打印文档之前对文档进行目视检查)。