这两天为RDLC报表横向放纸不能横向打印问题解决搞得焦头烂额。现在做个总结,给欠缺这方面经验的博友们提供点有益的参考,希望大家能少走弯路。
文章目录
问题由来
这次做了一个医院的住院发票打印。发票大小跟普通发票一样,尺寸是21cm×14cm 跟A5(21cm×14.5cm)很接近。 由于这种发票横着放比较方便,也便于通过两侧的小洞进行滚动进纸打印,所以一般是横着放来打印的。
按照实际大小,这里将宽度设为21cm,高度设为14cm。设置完成后,纸张方向自动(“自动”是这里的核心关注点)变成了横向。
1. RDLC设计
2. 创建打印机纸张类型
设置办法:(Win10) 设置》打印机和扫描仪》打印服务器属性(最下方的相关设置里面)》创建新规格
3. 设置打印首选项的打印纸
(Win10) 设置》打印机和扫描仪》选择对象发票打印机的“管理”
点击“打印首选项”,
选择上一步创建的“住院发票”。
但是,极为悲催的是,不论是将打印纸设成21cm×14cm。还是14×21cm,不论是将打印首选项的纸张设置成横向还是纵向,都无法横向(从第一行打印到最后一行)的方式打印发票。实际的效果是纵向打印:从最后一列打印到第一列。在程序里面设置landscape为true或者false也是没有任何影响。
原因
微软在开发rdlc规格的时候,使用了一个很“聪明”的办法:自动识别纵向横向。即:宽大于高即为横向,反之为纵向。这种聪明被玩过了头,变成了bug,使得打印无法按需设置打印方向。
Windows的默认进纸方向为纵向,导致了本次的悲剧。
解决办法
1. 遵守RDLC的纵横向强制规则(本次采用办法)
为了强制横向打印,
- 在RDLC设计时,将纸张设置为21cmx29cm(A4)
- 打印首选项也将默认打印纸设为A4纸。
可能有人会担心多打出一张空白纸(发票)。只要打印的范围不超过定制纸张(发票)的高度(如14cm),这种情况不会出现的。
2. 逆转RDLC的纵横向强制规则:旋转打印
参考这篇文章:C#将纵向内容打印到横向纸张上(打印旋转)
3. 放弃RDLC打印方案(略。。。)
如果以上方案均不满意,建议直接放弃RDLC打印方案。