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印表機,目前都沒問題

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



37 個回應:

匿名 提到...

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

匿名 提到...

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

鄭有為 提到...

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

may_day_software@hotmail.com

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

Hi, 電波兄

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

WILDOX 提到...

Re: 宗雄陳 <5562221134482932967>
您好,抱歉工作忙碌今日才回,若您需要原始碼,請給我可以寄送的電郵信箱,我會寄發給您的
目前原始碼只給私訊喔,謝謝

huang jen wang 提到...

hi 電波哥

也方便跟您要下code嗎?感謝.

Unknown 提到...

Hi, 您好, 方便跟您要個code嗎? 或是網路上是否有相關.net 電子發票 code範例可參考, 找了一陣子, 都看不到可踏出第一步的資料, 感溫!!

匿名 提到...

您好,方便參考您的原始碼嗎?作為我參考撰寫的方向,我的EMAIL是prj0589@holdav.ddns.net,再次感恩。

WILDOX 提到...

Re: 匿名 <5276640549239078381>
您好:我已經回信給您囉

WILDOX 提到...

Re: huang jen wang <2669284891016057027>
您好,很抱歉,可以給個信箱嗎?因為目前不公開,但我可以email給您

WILDOX 提到...

Re: Unknown <6444599758475234201>
您好,很抱歉,可以給個信箱嗎?因為目前不公開,但我可以email給您

huang jen wang 提到...

您好!我的email是 :
lasdin@gmail.com.在此先謝謝您了

WILDOX 提到...

Re: huang jen wang <925088204537523345>
您好,已經回您了喔

Simon Hou 提到...

不好意思, 不會使用Blogger, 我的mail是: simon@xinlanlc.com.tw, 感謝!

WILDOX 提到...

Re: Simon Hou <1366410652103888819>
沒關係,已經回給您囉

匿名 提到...

Hi,電波大大
可否分享您的 Code給我參考學習嗎?謝謝!!
E-mail: hsiu_tseng@tw.uneec.com

Roger 提到...

您好 可否分享您得程式碼嗎?
感謝您
tzerulin@gmail.com

lavery 提到...

你好, 可以分享您的程式碼給我嗎?
mail:laverylin@gmail.com
感謝.

po hung chou 提到...

你好 想和你要一下原始碼,或直接與您請教
目前都己做好輸出了,但logo印出位置都無法像您圖所示上方無空白,大約還有一公分空間,期待您的來信pohungchou@gmail.com

moo 提到...

您好 我對這類的程式非常感興趣 也方便給我一份code嗎?
非常感謝您

moo.and.music@gmail.com

洪裕彬 提到...

您好 我對這類的程式非常感興趣 也方便給我一份code嗎?
非常感謝您
pklaz0078@gmail.com

Bruce 提到...

您好 對於這發票列印程式非常感興趣 還請MAIL
感謝您的分享 !!
workfh@gmail.com

黃谷豐 提到...

您好,很感謝您可以分享您的程式,麻煩亦請寄一份給我參考!
Email:kfhuang7233@gmail.com

匿名 提到...

你好~
這個發票很程式很有幫助~我也遇到發票列印的問題~
可以提供原始碼嗎~
非常感謝~
我的email: andyxiechen@gmail.com

WILDOX 提到...

-------------------
^^^^^^^^^^^^^^^^^^^
此線以上已回信.....

Simon Hou 提到...

Hi, 經由板主無私的分享原始程式後, 終於稍能瞭解電子發票原理。 如各位Programer有興趣經由esc/pos command 直送com port印出的也可參考以下我google到的另一份C#原始碼, 內有"電子發票_EscPos_SDK.rar" C#原碼連結網址:

http://dearsherlock.github.io/star%20printer/starsdk-to-generate-qrcode



WILDOX 提到...

Re: Simon Hou <8418630204174944843>
感謝 Simon Hou 的分享,大家可以互相學習一下關於ESC/POS 控制方式~~

WILDOX 提到...

Re: Simon Hou <8418630204174944843>
文章裡面有很重要的一點,就是關於39碼的比例,依照一般的設定2:4確實會無法將條碼完整印出,如用條碼字型由於比例關係也容易導致縮放後比例變型,而不容易被讀出。利用機器本身指令碼可以控制39碼的粗細比,達到將19個字元的39碼列印進去的目標,GJ!

匿名 提到...

你好,
我目前也在開發電子發票
可以參考你的原始碼嗎~
我的email: zonhon@gmail.com
謝謝...

匿名 提到...

您好
我也想開發這類的程式,對於您開發的程式很感到興趣。方便給我一份您的code 參考嗎?
感謝您
email: s7630978@yahoo.com.tw

Wang D.J. 提到...

請問可以連續印多張發票嗎?還是一個XML只能印一張?

匿名 提到...

你好:
目前也在開發電子發票,也想參考一下,
方便也給我一份Code參考嗎?
謝謝
email:ayay8221@gmail.com

Unknown 提到...

您好
您的列印程式真的很好用
方便跟您要原始碼嗎?
如果可以請您寄到
tommy@fiat.club.tw
感謝您了

gsc0210 提到...

您好
不知道是否可以取得您的原始碼,那對後進我在學習C#語言上是一大幫助,真的很感謝。
我的EMAIL: gsc0210@ms9.hinet.net

shen 提到...

您好,感謝您大方分享您的程式,可否麻煩寄一份給我,謝謝!
Email:shen.cpa@msa.hinet.net