2016年8月30日 星期二

統一發票列印小程式


因為公司會在一堆系統上都有可能要印發票(真不懂要怎麼搞?)

希望可以有個小工具可以列印電子發票,

原本發票列印程式要使用條碼機專用語言(ZPL、EPL),但容易被某種機型綁定。

當然可以考慮使用ESC/POS指令的方式,但也是要印表機支援這種指令列印模式(當然多數表機都有支援),不過要列印QR碼,就有點不是那麼容易了,除了要自己編碼外還要注意中文問題。

後來我想改用Windows Printer Driver來列印,雖然不如指令式快速,但可以方便各類型程式應用,因此考慮了以下的條件:

使用C#開發、.Net 2.0平台、Console呼叫

本來想用RDLC來做,但是很不幸的,失敗了,原因就在於條碼,
國稅局訂定的Code39條碼內要放入21個字元(19+2)長度,
如果使用RDLC的話,解析度只有100DPI,密度不夠,條碼線條沾黏嚴重。

一般的條碼機至少都有200DPI得等級,這RDLC也太彆腳了吧,
網路上找盡RDLC條整解析度的方式都沒有比較好的效果。

因此,改用直接C#繪製的方式來做,
當然中間為了條碼圖像清晰度的問題花了不少心力解決。

下載點:PrintInvoice



使用方式:
1、先設定好列印發票的印表機驅動程式內的紙張,或是裁切指令等。
2、產生資料檔 Data.xml (可以參考程式裡面的Data.xml內容)
3、用程式呼叫小程式,並賦予參數
   參數 :
              -i 指定資料來源檔案 (XML檔)
              -p 指定送出的印表機

版面配置:

每一個紅框都對映著XML裡面每個欄位的資料(自行參考XML裡面的註解)

其他事項:
invclogo.bmp 可以修改、更換,建議為純黑白色的BMP檔。
中間Code39條碼可能會隨印表機的解析度略有寬度上的變化。
Data.xml 是BIG5編碼資料。
每個QR碼內容最多120BYTE長度,QR碼編碼為UTF-8、容錯度:L。

已經測試過雷射印表機、條碼機、PDF印表機,目前都沒問題

其他電子發票資訊請參考-財政部電子發票整合服務平台



6 個回應:

匿名 提到...

你好,請問這個發票程式是你寫的嗎?好厲害,我有相關問題想要請教你不知道方不方便,麻煩可以給我你的mail嗎?我的mail是ulo0601@gmail.com,期待你的來信,謝謝

匿名 提到...

你好,請問這個發票程式是你寫的嗎?好厲害,我有相關問題想要請教你不知道方不方便,麻煩可以給我你的mail嗎?我的mail是ulo0601@gmail.com,期待你的來信,謝謝

鄭有為 提到...

您好,方便參考您的CODE嗎?我自己也是用「預設印表機」的方式處理,可是印出來都很怪;希望可以參考您是如果開發的,感恩,希望沒有打擾到您^^

may_day_software@hotmail.com

翁大砲 提到...
作者已經移除這則留言。
翁大砲 提到...
作者已經移除這則留言。
宗雄陳 提到...

Hi, 電波兄

小弟我公司也正在進行turnkey的開發,目前卡在列印證明聯上,不知 電波兄 是否可以分享你的部分code供小弟學習.