C#针式打印机自定义纸张连续打印爬坑过程

简介: .net 打印业务

前言

最近接到一个项目,主要功能是对业务单据的流程管理。但是要实现针式打印机对业务单据的连续打印。客户提供的单据格式如下,要求针式打印机一次可连续打印50-100张单据。

客户提供的单据格式

接到需求以后,迅速开搞,单据的流程管理开发非常顺利。但针式打印机连续打印单据的开发过程异常艰辛。本文主要讲述开发选型的过程、遇到的问题、以及填坑过程。

选型

之前开发过的票据打印程序使用的是GoldPrinter(金质打印)。不过客户提供的单据格式和传统的发票类票据格式不太一样。思来想去决定使用报表工具。之前使用过ActivexReport,但是感觉太庞大了。发现.NET自带了报表工具RDLC,决定尝试一下。

RDLC 是一个坑

根据用户提供的纸张格式,结合网上的教程,2个小时就开发出了RDLC的报表。开发完毕后感觉自信感爆棚,我就想问"还有谁?"。

RDLC报表

设置纸张大小设置横向打印。

纸张设置

使用针式打印机测试打印。发现一个比较奇怪的问题。只有将纸张竖向放入针式打印机才能正常打印。横向放入只打印一半。这个时候,我还不理解为什么。从网上胡乱搜索资料。搜索到一些RLDC不能自定义纸张,RDLC不能横向打印机等文章。当时也不是很理解。捣鼓了一天一直不行就放弃了,改用ActivexReport

ActivexReport 开发

ActivexReport的开发过程也比较简单,开发报表差不都也是用了2个小时的时间。开发初期还是使用的和RDLC报表参数的设置。

使用打印机测试打印,问题照旧。还是竖着能打印,横着打印一半。此时挫败感非常强烈,但是生活还得继续啊。开始分析思考问题。

  • 是不是打印机设置有问题?、
  • RDLC网上说的问题到底什么意思。
  • 感觉好像也没什么问题啊,使用的A4纸打印机。横向打印和竖向打印的放纸也都是一样的。是不是应该调整报表?

带着上面的问题,楼主开始搜索。后来找到一篇文章说针式打印机实现连续打印需要自定义纸张,具体过程如下。

[1] 打印机添加自定义纸张设置成纵向,调整纸张的宽度和高度。

打印机设置

[2] 调整报表的纸张于面前打印机设置的纸张一样的规格。

测试打印成功了,完美。

连续打印调试

连续打印的测试过程还是比较轻松的。用了两个晚上搞定的。第一夜将纸张的高度设置成了14.0,打印了20张以后。打印错位就比较严重了。隐隐感觉是纸张设置的有点大了。

于是开始各种找资料,使用的打印机型号EPSON LQ-635K,从爱普生的官网下载了LQ-630K635K730K735K新机使用指南。在文档中发现常用的纸张规格有21.4*13.97。瞬间感觉有救了,晚上回家重新设置了报表纸张格式和打印机的自定义纸张格式。测试打印了30页,没有出现偏移。爱普生的打印机还是非常靠谱的。说明书更靠谱。

总结

通过这个项目了解到了微软的RDLC报表,也学会了如何使用。最终也明白了RDLC目前存在的问题,设置自定义纸张大小如果宽度大于高度,报表会将纸张自动改成横向的。所以想实现针式打印机连续打印是不太可能的。也了解了针式打印机的安装使用,以及自定义纸张的意义。耗费了楼主2个白天3个夜晚,但总归问题都解决了。

参考链接

目录
相关文章
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
69 0
|
5月前
|
C# C++
C# 自定义时间进度条
本文作者通过参考leslie_xin的一篇文章,成功创建了一个自定义的WinForms控件——时间进度条,该控件带有时间刻度和多种可定制的属性,如颜色、时间间隔等。作者在控件中加入了开始和结束时间,以及自适应的时间刻度间隔。控件能根据设置显示时间标签,并提供了事件处理,如值改变时的触发。代码中包含了计算时间刻度、绘制刻度线和时间标签的逻辑。作者强调了避免循环调用事件、使用OnXXX()形式的事件处理函数以及注意自定义控件中的属性和事件设计。
120 7
|
3月前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
|
编译器 C#
c# 自定义扩展方法
c# 自定义扩展方法
|
6月前
|
移动开发 JavaScript 安全
C# 实现微信自定义分享
C# 实现微信自定义分享
|
6月前
|
C#
C#学习相关系列之自定义遍历器
C#学习相关系列之自定义遍历器
|
编译器 C#
C#中导入其它自定义的命名空间
c#中怎么导入其它自定义的命名空间首先要确保已经导入了想要导入的自定义的命名空间。如上图这时编译器应该会报错,此时就需要手动去添加引用了,cs文件默认没有添加引用,只是加载了想要导入的命名空间,但是没有添加引用,所以需要自己要手动添加引用。切记!然后会有一个对话框选择你想引用的命名空间,点击确定即可。注意:一般而言,C#中如果没有改变那么一般项目的类名都默认是Program,在引用时需要注...
102 1
C#中导入其它自定义的命名空间
C#或Winform中的消息通知之自定义优雅漂亮的通知效果
Custom Notification自定义通知提示,一款非常优雅漂亮的自定义通知效果,主要介绍其实现思路、调整和优化...
1191 0
C#或Winform中的消息通知之自定义优雅漂亮的通知效果
|
C# 图形学
C#绘制自定义小人
C#绘制自定义小人
|
存储 设计模式 缓存
C# 实现 key-value 结构自定义缓存 CustomCache
C# 实现 key-value 结构自定义缓存 CustomCache
179 1
C# 实现 key-value 结构自定义缓存 CustomCache