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

详情

我的Fargo打印机包括Magstripe编码器,因此除了标准光栅打印外,它还可以将磁数据编码到卡上。对于磁性编码,我需要使用Fargo SDK并使用要格式化的专门格式化的轨道数据调用某些函数。

假设我有一个FixedDocument,其中包含20张卡的栅格数据。我使用PrintDialog.PrintDocument()将此文档发送到WPF的打印引擎。这是问题所在。在打印完每张卡之后,我需要调用磁性编码函数,但是显然没有办法获得可以在其中拦截并调用SDK函数的通知(例如PrintPage事件)。

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

打印FixedDocument的每一页后,有没有办法得到通知?

最佳答案

自己弄清楚。看起来像磁条打印机(或至少我拥有的Fargo打印机)将在TextBlock属性中具有磁条格式数据的Text元素视为特例。而不是将它们作为常规栅格输出发送,而是将它们发送到磁性编码器,以将其写入磁带。因此,例如,如果您的TextBlock看起来像以下任何一种:

<TextBlock Text="~1%DATA?" />
<TextBlock Text="~2;DATA?" />
<TextBlock Text="~3;DATA?" />


它将被发送到磁条编码器,而不是光栅打印机。请注意,每个音轨(分别为音轨1、2和3)都需要在前面加上特定的字符。另外,每个轨道都有特定的字符列表。可以在this wiki page上找到更多详细信息。

因此,这使WPF开发人员可以使用标准的WPF做法(甚至是MVVM)使用PrintDialogFixedDocument类来打印磁条卡,而无需PrintPage事件。

关于c# - 每个打印页面有任何事件吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43549313/

10-10 23:33
查看更多