打印标签的最佳设计方法

时间:2012-10-16 12:35:20

标签: vb.net winforms design-patterns printing

目前,我有一个UI,用户从列表中选择产品。当他们双击他们选择的产品时,另一个表单会显示产品的一些附加信息以及相关的条形码。在第二个表格上有一个打印按钮。 (这是我的问题所在)当单击打印按钮时,我想将此信息发送到标签模板并可查看(可能通过PrintPage),然后就可以从那里发送到打印机。

实现这一目标的最佳方法是什么?我可以想出两种不同的方法来实现这一点,但我确信有更好的方法。 1)我可以在XAML中创建模板,然后数据绑定到表单 2)我可以在form.vb的_PrintPage事件中创建模板。 (最简单但不是最快)

  • 是否有更简单的方法来创建模板并将信息发送给它然后打印模板?
  • 只是制作另一个窗体并以这种方式设计模板会更容易,但是可以在运行时将此窗体发送到打印对象吗?

2 个答案:

答案 0 :(得分:2)

通常我需要打印的任何东西,比如标签,我都使用报告工具。 .Net附带了自己的Microsoft报表工具http://msdn.microsoft.com/en-us/library/bb885185.aspx,并且有许多第三方报表工具,如Crystal或Telerik。他们都有视觉设计师进行布局,并为您处理所有打印预览和打印内容。

答案 1 :(得分:0)

如果我理解正确,您希望在不使用报告工具的情况下控制自己程序中的过程?在这种情况下,我将列出一些关于一个实现的想法 -

您可以使用包含区域和区域类型的(可序列化)字典来创建简单的模板功能。当您使用绝对区域(标签本身)时,您可以这样做:

Private Template as Dictionary = New dictionary(Of String, TemplateEntry)

Friend Class TemplateEntry
    Public MeasureType As MeasureType
    Public RegionType As Regiontype
    Public X As Single
    Public Y As Single
    Public Width As Single
    Public Height As Single
    Public Content as Object
End Class

Friend Enum MeasureType
    Centimeters
    Millimeters
    Inches
    Pixels
    '...
End Enum

Friend Enum RegionType
    Text
    [Image]
    BarCode
    '...
End Enum

然后在您的代码中,您将x,y,w,h转换为基于DPI的像素,并返回Rectangle例如。您可以通过XML序列化字典来创建其他模板等等。

解析时初始化Content字段。

要添加你可以做的例如:

Dim tmpl As TemplateEntry = New TemplateEntry
tmpl.MeasureType = MeasureType.Millimeters
'...

Template.Add("Barcode", tmpl)

然后将模板“渲染”到画布上进行打印:

For Each tLine in Template
    Dim r as rectangle = CalcMeasuresIntoPixels(tmpl)
    '...
    ' render each element based on type and location
Next

希望这给了一些意见。