0

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

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

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

2 回答 2

2

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

于 2012-10-16T12:52:45.217 回答
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

然后在您的代码中,您根据 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

希望这给了一些意见。

于 2012-10-16T14:36:28.953 回答