【问题标题】:Best design method for Printing labels印刷标签的最佳设计方法
【发布时间】:2012-10-16 12:35:19
【问题描述】:

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

完成此任务的最佳方法是什么?我可以想到两种不同的方法来实现这一点,但我相信还有更好的方法。 1) 我可以在 XAML 中创建模板,然后将数据绑定到表单 2) 我可以在 form.vb 的 _PrintPage 事件中创建模板。 (最直接但不是最快的)

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

【问题讨论】:

  • 我认为值得注意的是,当我说标签时,我指的是可以粘贴到某物上的物理标签,而不是表单上的标签框。

标签: vb.net winforms design-patterns printing


【解决方案1】:

通常我必须打印的任何内容,例如标签,我都会使用报告工具。 .Net 带有自己的 Microsoft 报告工具,http://msdn.microsoft.com/en-us/library/bb885185.aspx,还有很多第三方报告工具,例如 Crystal 或 Telerik。他们都有用于布局的视觉设计师,并为您处理所有打印预览和打印内容。

【讨论】:

  • 感谢 Kratz 的回复,我会调查一下。
【解决方案2】:

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

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

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

然后在您的代码中,您根据 DPI 将 x、y、w、h 转换为像素并返回 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

希望这能提供一些意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多