目前,我有一个UI,用户从列表中选择产品。当他们双击他们选择的产品时,另一个表单会显示产品的一些附加信息以及相关的条形码。在第二个表格上有一个打印按钮。 (这是我的问题所在)当单击打印按钮时,我想将此信息发送到标签模板并可查看(可能通过PrintPage),然后就可以从那里发送到打印机。
实现这一目标的最佳方法是什么?我可以想出两种不同的方法来实现这一点,但我确信有更好的方法。 1)我可以在XAML中创建模板,然后数据绑定到表单 2)我可以在form.vb的_PrintPage事件中创建模板。 (最简单但不是最快)
答案 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
希望这给了一些意见。