在WPF中,使用PrintDialog
和FixedDocument
,是否有一个事件(或任何其他方式)在每个页面打印时收到通知?
My Fargo打印机包含一个Magstripe编码器,因此除了标准光栅打印外,它还可以将磁数据编码到卡上。对于磁编码,我需要使用Fargo SDK并使用特定格式的轨道数据调用某些函数进行编码。
我们说我有FixedDocument
包含20张牌的栅格数据。我使用PrintDialog.PrintDocument()
将此文档发送到WPF的打印引擎。这是问题所在。我需要在每张卡打印后调用磁编码功能,但显然无法获取通知(类似PrintPage
事件),我可以拦截并调用其中的SDK函数。
这与WinForms打印引擎不同,其中PrintPage
事件被触发,我们使用GDI +在该事件中组合输出。
是否有办法在打印FixedDocument
的每一页后收到通知?
答案 0 :(得分:0)
自己搞清楚。看起来magstripe打印机(或者至少是我拥有的Fargo打印机)将TextBlock
属性中包含magstripe格式数据的Text
元素视为一种特殊情况。它们不是像普通的光栅输出那样发送,而是发送到磁编码器,将它们写入磁带。例如,如果您的TextBlock
看起来像以下任何一种:
<TextBlock Text="~1%DATA?" />
<TextBlock Text="~2;DATA?" />
<TextBlock Text="~3;DATA?" />
这将被发送到磁条编码器而不是光栅打印机。请注意每个轨道需要预先添加和附加的特定字符(分别为Track 1,2和3)。此外,每个轨道都有特定的字符列表。有关详细信息,请参阅this wiki page。
因此,这允许WPF开发人员使用标准WPF实践(甚至MVVM)使用PrintDialog
和FixedDocument
类打印磁条卡,而不需要PrintPage
事件。