這兩天爲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打印方案。