在WPF中,使用PrintDialog
和FixedDocument
,是否有事件(或任何其他方式)在每页打印时得到通知?
详情
我的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)使用
PrintDialog
和FixedDocument
类来打印磁条卡,而无需PrintPage
事件。关于c# - 每个打印页面有任何事件吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43549313/