每个打印页面的任何事件?

时间:2017-04-21 18:04:58

标签: c# wpf printing

在WPF中,使用PrintDialogFixedDocument,是否有一个事件(或任何其他方式)在每个页面打印时收到通知?

详细

My Fargo打印机包含一个Magstripe编码器,因此除了标准光栅打印外,它还可以将磁数据编码到卡上。对于磁编码,我需要使用Fargo SDK并使用特定格式的轨道数据调用某些函数进行编码。

我们说我有FixedDocument包含20张牌的栅格数据。我使用PrintDialog.PrintDocument()将此文档发送到WPF的打印引擎。这是问题所在。我需要在每张卡打印后调用磁编码功能,但显然无法获取通知(类似PrintPage事件),我可以拦截并调用其中的SDK函数。

这与WinForms打印引擎不同,其中PrintPage事件被触发,我们使用GDI +在该事件中组合输出。

是否有办法在打印FixedDocument的每一页后收到通知?

1 个答案:

答案 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)使用PrintDialogFixedDocument类打印磁条卡,而不需要PrintPage事件。