说说报表续打

      所谓续打就是同一个报表,在已经打印完毕后,由于数据的增加,将已经打印的纸张(旧纸)再放入打印机,然后从上一次打印的位置开始接着打印新增的数据。

     续打比较适合日志性质的报表打印,比如医院信息系统中的病程记录打印。病程记录是比较重要的病历文书,需要医生定时书写,并签名表示确认,而目前电子签名还不现实,因此计算机里面的文档是不能手动签名的,需要打印出来在手工签名。一天或几天打印一次,则一个完整的病程记录文档需要打印多次。很显然单个的病程记录不大可能正好占据一页,若硬要一次打印从新的一页开始则浪费纸张而且格式不符合要求。因此就需要降上一次打印的已经有内容的最后一页(旧纸)放在新纸的上面然后进行打印,对于续打线由于上次打印已经打印的页眉页脚,因此续打时不应打印页眉页脚。

     如果只是简单的从指定页开始打印来实现续打,则新打印的内容会和已经打印的内容相重复。此时因为打印机瞬时硬件状态和操作员的对齐精度的问题,新打印的内容不会和旧内容完全重合,则此时打印效果可能如图所示非常糟糕难看。

    对于续打,可以在打印的时候将打印的最后一个记录的定位信息保存到数据库中,下次打印时就可以自动的从上次打印的位置继续打印了。我估计银行信息系统中打印存折就可能采用这种模式。但如此以来,程序将不得不为支持续打而增加不少内容,需要新增数据库结构,需要新增程序来控制续打,而且报表模板也可能需要作特定设置,如果进行一次续打后操作员觉得效果不好想要重新打印则程序又得为此修改数据库。若信息系统中存在不少续打的应用,则程序的开发和维护都比较困难。

   从上面的分析,我们可以知道续打必须有操作员的辅助,操作员需要找到要续打的旧纸并按照正确的方向放在打印机纸盒的最上面,操作员为了续打要手动的做不少工作。因此干脆在续打前让操作员再辛苦一下指定续打位置也未尝不可,如此开发人员不必为了支持续打而劳累,一切交于支持续打的打印工具和操作员。操作员由于亲自指定续打位置而更注意使用,使用更自由,而且这个工作量不算大。

   操作员自己定义续打位置,可以使用鼠标点击打印预览视图中的某个位置,然后在点击出绘制一个横线表示续打位置,打印机就从续打线处开始打印。续打线上面的部分不打印但占地方,而且续打页不可以打印页眉和页脚。这里又有一个续打线是否合理的问题,续打线应当在打印页面上某个空隙中,而不能横跨一行文本或图片,报表中可能某些区域不能放置续打线。操作员可能眼神不好或者鼠标不灵活,有可能难于做到这点,这就需要报表工具对用户确定的续打线位置进行修正,以确保续打位置合情合理。

   实现续打方法可能有很多种,本人自己写的报表工具实现续打的的基本过程为,当操作员在打印预览控件中按下鼠标,则程序获得鼠标位置,作为续打线的位置,然后将其转换为在文档视图中的位置,然后进行修正,确定续打线的最终位置,而在打印预览控件也在续打线的位置上绘制一条横线。当打印文档时,则续打线以上的文档内容不进行打印,而从续打线的位置开始打印文档。而且打印的第一页文档不打印页面和页脚。

原文地址:https://www.cnblogs.com/xdesigner/p/488990.html