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

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



176 個回應:

匿名 提到...

你好,請問這個發票程式是你寫的嗎?好厲害,我有相關問題想要請教你不知道方不方便,麻煩可以給我你的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

WILDOX 提到...

Re: Wang D.J. <542587048530393705>
Hi Wang D.J. : 這個XML一次只能一張喔..

kunghan lin 提到...

電波兄 您好:
目前也遇到電子發票列印的問題,由於沒這方面的Know How,所以不知是否能請您分享Source Code可以研究學習,感恩。
小弟eMail:kunghan0428@gmail.com

huang jen wang 提到...

電波兄,先謝謝你上次分享程式.我這邊遇到一個小問題,就是透過小程式列印的發票會抓取當天日期,若要列印之前日期的發票是否有辦法?ex20170926列印20170812開立的發票

匿名 提到...

你好,最近也在開發電子發票列印的程式,想跟你要可分享的原始碼,謝謝
我的Mail: rogerleekee@gmail.com

WILDOX 提到...

Re: huang jen wang <3485647643103429601>
Hi
在 Data.xml 裡面標籤 <col name = "printtime">2016-08-23 22:39:46</col> 可以拿來用

然後修改程式 262 行 e.Graphics.DrawString(now.ToString("yyyy-MM-dd HH:mm:ss"), mFont, Brushes.Black,
改成 e.Graphics.DrawString(row["printtime"].ToString(), mFont, Brushes.Black,

就變成自己給列印時間了,
原本我有定義,但因為考慮到LOCAL機器列印時間比較符合所以在程式裡面改成now的方式
如果需要自己定義列印時間,那就把它恢復吧

huang jen wang 提到...

萬分感謝

呂美蘭 提到...

希望也能取得源碼,研究探討一番

WILDOX 提到...

Re: 呂美蘭 <5443695574500423684>
Hi 請問有郵件嗎?我可以寄檔案給你

呂美蘭 提到...

先謝謝電波,我的郵箱為p84586@msn.com
再次感謝你。

匿名 提到...

你好:
不好意思,
希望可以給我一份Code參考
謝謝
email:ayay8221@gmail.com

ken kao 提到...

您好!
方便跟你要一份code來參考嗎?
感激不盡!
kwk321@gmail.com

匿名 提到...

電波大大,

懇請您提供給我source code, 感恩!
email: wenchan.huang@gmail.com

Rj Lwo 提到...

您好

可以跟您要一份原始碼參考嗎?
我的email: rabbit.lwo@gmail.com
麻煩您
謝謝

匿名 提到...

您好:
因為我們公司希望自建TURNKEY,在列印證明聯的QRCODE是要用圖檔列印
但無法達到左右兩邊的QRCODE尺寸大小一致,可否請您分享一下您的程式讓我參考學習.
謝謝
e-mail: amy1108.yang@msa.hinet.net

WILDOX 提到...

Re: 匿名 <9165127048254945784>
QR code 本身會受到內容影響大小的,所以建議您把每個QRcode內容定在128byte
這樣會讓它的大小固定,內容不足的部分就以空白替代是可以的。

BingDa Tasi 提到...

您好

可以跟您要一份原始碼參考嗎?
我的email: bingda0325@gmail.com
麻煩您了.謝謝!!

ypiao 提到...

你好!也可以分享一下源碼給我嗎?
謝謝!感恩:ypang68@gmail.com

吳肇祐 提到...

您好,我也正在開發電子發票,現在也走到列印報表的部分了
可以跟您要一份原始碼學習嗎?

謝謝再謝謝
我的mail是frankiewu61@gmail.com

匿名 提到...

Hi, 電波兄

方便跟您要一下code參考學習嗎?我的EMAIL是 chenph@etc.org.tw,感恩您。

匿名 提到...

您好,最近公司也在上B2C電子發票,被QRCODE困擾很久,方便跟您要一下code參考嗎?我的EMAIL是 michelle_chen@sentien.com.tw,謝謝您。

Zac Chung 提到...

您好,我最近也在研究電子發票,可否分享您的CODE給我參考?謝謝!!
我的EMAIL:f20020108@gmail.com

Sky 提到...

您好, 我最近也在研究有關發票的寫法, 方便參考您的code學習嗎? 謝謝!
Mail: wiwi.sky0415@gmail.com

匿名 提到...

你好:
目前也在開發電子發票,目前在QRcode那邊煩惱很久,
方便也給我一份Code參考嗎?
謝謝
email:open15987@gmail.com

George 提到...

你好:
目前也在開發電子發票,也想參考一下,
目前問題也是出在條碼的清晰度問題~
方便也給我一份Code參考嗎?
謝謝
email:fgtyu2001@gmail.com

Mayo Lin 提到...

您好
可以跟您要一份原始碼參考嗎?
我的email: hsen7@hotmail.com
麻煩您
謝謝

劉明睿 提到...

你好,我也可以要一份原始檔嗎

Email:rayrevolutionliu@gmail.com

感謝您

謝謝

KA.Kevin 提到...

您好!

懇請惠賜 您的 source code 供參考!
我的email: ka.kevinliu@gmail.com
謝謝您!

木頭人 提到...

您好,
最近對這方面的程式有興趣,是否還能提供source code參考呢?
email: combivir.yu@gmail.com
感謝

Wenchung Chang 提到...

您好!
懇請惠賜 您的 source code 供參考!
我的email是 :
wcchang.hh@gmail.com
在此先謝謝您了

黃銘毅 提到...

Hi, 您好!

可否提供您的Source Code作參考.
我的EMAIL: learn66@pchome.com.tw

Thanks.

WILDOX 提到...

Re: 黃銘毅 <3069496163262425774>
您好,您的信箱無法寄送,出現『未知的收件人』喔

遠端伺服器的回應如下:
550 5.1.1 : Recipient address rejected: User unknown in relay recipient table

Josh 提到...

您好,最近工作上也在研究電子發票列印的程式,若是方便的話也請寄給我原始碼做參考 萬分感謝。
email: distract777@gmail.com

匿名 提到...

您好,最近工作上碰到一些發票的問題,不知道可否提供您的原始碼作為參考呢~? 謝謝。
email:zxcvb1229@gmail.com

0523 felix 提到...

你好,最近在研究發票是如何產生,想和您拿一份原始碼做參考
我的e-mail是felix0523tw@gmail.com
麻煩您了
謝謝

黃銘毅 提到...

Hi, 您好!

不好意思,改用myh0511.tw@gmail.com,
請再提供您的Source Code作參考.
感謝.

蔡世珉 提到...

您好,非常感謝您提供您的程式
小弟目前在開發Web POS系統(PHP),需連結發票機印出電子發票
正苦惱多時,剛好看到您的文章,讓我看到一道曙光
C#不是很熟,不知道能否跟您討要Sorce Code研究
另外不知道您知不知道怎麼用php結帳時傳值然後呼叫小程式列印?
我的信箱: a0935756869@gmail.com
非常感謝您!

Simon Hou 提到...

To 蔡世珉:
PHP網路上有整套的列印模組原始碼程式可以參考。
https://github.com/mike42/escpos-php

WILDOX 提到...

Re: Simon Hou <5880924893902936515>
Hi 感謝Simon Hou提供範例給大家交流。

WILDOX 提到...

Re: 蔡世珉 <9205781394453787246>

HI 我已經寄給你囉

您可以參考 Simon Hou大 給的範利看看是否符合需求,這是一種直接由PHP控制列印方式,
前提是你的環境下可以由伺服器端控制到那部印表裝置。

但如果你的伺服器端無法控制到那部印表裝置就得使用其他方法做。

一般來說WEB系統要列印的方法,如果不使用瀏覽器本身的列印方式,其實就是想辦法讓瀏覽器呼叫本地端程式,
其實這是有風險的,因為就是怕病毒植入本機,所以瀏覽器才會禁止這種呼叫本地程式的行為。

早期微軟為了可以做到這點所以出現了ActiveX這種程式可以註冊到 IE 執行,但是缺點是只有 IE only
遇到windows升級問題也會造成ActiveX問題多多,當然各家瀏覽器都有插件可以做,但是每種瀏覽器的插件開發方式都大不相同,因此腦燒工程師,也造成維護成本太高,漸漸大家都不願意做插件。

但是底下有幾種方式可以參考:

第一種利用瀏覽器核心套件開發專用瀏覽器,像是以前對岸有很多自製瀏覽器可以控制本機電腦的程式,以利政府監控人民等,這種自製瀏覽器可以攔劫特定的HTML TAG或是http header命令去執行特定的本機工作。如果公司還極度封閉的有可能使用這種方式:不讓使用者接觸一般的瀏覽器,只能使用公司自己開發的聯覽器之類...

第二種比較流行就是透過第三方『偽協定』程式(也可以自己寫程式,只要能接受URL呼叫即可)註冊到電腦,讓它成為通訊協定的方式,WEB利用呼叫一個假定的協定讓這個程式可以運作,不管是傳送資料或是執行程式都可以,你可以參考底下的程式(懶得寫可以用它開發的,但原理是類似)
http://blog.pulipuli.info/2017/03/windowssystem-protocol-open-windows.html

像是最著名的就是 ed2k:// (電驢/VERYCD) thunder:// (迅雷) qqdl:// (訊騰下載) 這種程式使用的方式

本人沒有開發過這種方式,但有稍為研究過,因為其實這種方式早在微軟推出MSN時就開始使用,而且微軟也沒有公開,好像是被Hacker發現公開的。

現在我有在玩MIT學生開發的安卓開發工具 http://ai2.appinventor.mit.edu
這個網站也是要裝一個aistart程式可以接受web的原始碼到本地電腦,並且編譯程式,並發佈到手機上,使用的也是這種原理。

※還是要提醒您,第二種方式現在常見於各大免費空間網站,要求你下載一個程式(有時候會偽裝檔名成為你要下載的檔案)然後才能繼續下載你要的檔案,這個是很可怕的漏洞,因為有的會去綁架首頁、安裝廣告軟體、或是開通本機偽協定讓各大駭客網站可以以自由進出你的電腦等...

蔡世珉 提到...

非常感謝Simon Hou和WILDOX提供的方式
兩種方式我都會研究試試看
有遇到其他問題在向你們請教

Simon Hou 提到...

To 蔡世珉、版主:
看到蔡Sir寫開發Web POS系統(PHP), 應該是指user端的pos機用的, 想到有公司開發出使用php.exe執行背景服務Listen 到如http://localhost:***(不用在本機安裝網站及php), 然後使用上面那個提到的php printer原始碼來達到本機列印到Thermal printer(com port, driver, usb, api等等連接模式) , 不熟php, 只是最近研究發票機時有看過。

猴子 提到...
作者已經移除這則留言。
侯昱宏 提到...

您好 我是中原大學資工系的學生
因為專題跟電子發票有關
現在也卡在列印發票證明聯的部分
能否跟您要個Source Code作參考嗎?
信箱:s10427221@cycu.edu.tw
感謝您

林家宏 提到...

方便跟您要一下code參考學習嗎?我的EMAIL是zzz3456kimo@yahoo.com.tw,感恩您

黃鼎彥 提到...

Hi, 您好!

可否提供您的Source Code作參考.
我的EMAIL: dingyeng3@gmail.com

感謝您~

匿名 提到...

您好!

可否提供您的Source Code作參考.
我的EMAIL: chih0006@gmail.com

感謝您~

綠川生活館 提到...

您好!

懇請惠賜 您的 source code 供參考!

我的email是 : rex@yotta.com.tw

在此先謝謝您了

感謝您~

Unknown 提到...

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

Richard Huang 提到...

你好,
我目前也在開發電子發票
可以參考你的原始碼嗎?
我的email: turing@pchome.com.tw
感謝

Simon Hou 提到...

Dear 版主,
有個問題請教一下, 電子發票有規定長度得9公分, 但一般熱感機上面裁刀跟下面印字頭有一點半公分,變成每次印完上頭會有一點半公分空白, 讓下面發票資訊排版較不易, 不知你知曉如何解決這個問題嗎?

感溫!!!

WILDOX 提到...

Re: Simon Hou <2563382749646336319>
您好,要解決這個問題有兩個方法:
1、更換印表機,找裁刀上方留白處比較小的機種,這可能牽扯到比較多層面:廠商技術、設備成本、採購問題等等。
2、捨棄版面下方3行資訊不要列印,可以多出這1.5公分,你去看7-11的版面就是這樣(上面一片空白),當然程式要修改,每一行的列印位置Y軸加上下移的長度,並且把最後3行列印程式碼拿掉即可。

WILDOX 提到...

Re: Simon Hou <2563382749646336319>
注意一下,上一個回覆的第2點,可能會受到印表機的『起始列印位置』影響,如果裁刀下1.5公分是包含在9公分以內,是需要按照上述方式修改程是列印位置的Y軸的。『但是』如果廠商這個1.5公分空白不包含在9公分的版面內,那程是修改方式就要不一樣:
1.實際列印空間被削去只剩9cm-1.5cm=7.5cm,你要調整畫布大小高度只有7.5cm,然後每一行列印Y軸『不用變更』,只需要『刪除最後3行列印』即可完成。
您還是要實際測試一下您的印表機特性才可以。

Simon Hou 提到...

Dear 版主,
1. 的確不同機器會有不同留白處, 目前測是epson tm-t88ii是最少的1.1cm, 也有其他的長逹1.8cm
2.想要利用那留白, 業者好像都是以裁完後先預印下一張NVLogo方式, 這樣就可以少掉動態載入LOGO地方, 不然就得看原廠是否願更訂firmware成裁完退紙了

感溫!!!

翁毓婍 提到...

您好~~我最近也為了這個電子發票頭痛中。
很希望您可以分享您的code給我,這樣或許會讓我有點頭緒。
若可以的話,麻煩您寄到我的email,非常感謝

emily091131027@gms.tku.edu.tw

Simon Hou 提到...

Dear 版主,
剛關於第2點預印logo方式測試好像也沒用, 位置仍是在裁完後的印字頭位置。
看來只剩原廠更改firmware一途和找留白較少點的機器。

WILDOX 提到...

Re: Simon Hou <2239115132370266792>
感謝Simon Hou大的經驗分享,不過依照我的經驗應該不太可能『預印』,因為那是機器的『gap』...
我看過之前(會說之前是因為現在很少看到了)有廠商做出有紙張定位的機種,但缺點是這紙張兩側有黑色MARK,但是因為市場太小,可能已經被淘汰了,這樣可以減少定位gap浪費

WILDOX 提到...

Re: Simon Hou <8533969103332989102>

HI,Simon Hou,依照我的經驗有的機器可以利用更改驅動方式達成不見得要改韌體,像是第三方驅動 Seagull 公司,他們家的驅動可以強迫減少邊界Gap(比原廠還要窄的邊界,半沒辦法100%取消邊界),但該公司驅動不見得所有機型都支援。屬於一種可選方案。

另一種,我曾經在精聯看過代理的機器(我忘記牌子),可以『roll-back』紙張到紙張上緣邊際,然後再列印,不過缺點是會變慢,價格也不便宜。

所以設備廠商為了減少機構複雜度(也可以減少成本/維護)、增加列印速度,所以一般機器只會做出Forward方式列印,因此會犧牲掉這個上緣Gap空間。

早期點陣印表機也有這個上下Gap,而且無法取消,其原因在於當紙張進入"滾筒"時需要有個固定輪來壓住紙張,從這個固定輪到出紙口的斯紙線之間,就會出現一個距離,這個距離就是印表紙的上緣『定位間距』。因此當紙張比較薄時會因為靜電效應或是長時間捲曲服貼於滾筒上,利用上緣出紙的GAP固定到出紙口,可以確保紙張不會因為服貼滾輪而從入紙口的上方再捲回去,造成紙張咬死致使機器損壞。

WILDOX 提到...

Re: Simon Hou <2239115132370266792>

那個NVLogo方式可能不是『預印』,而非常可能是『套印』,也就是紙張上先印好LOGO位置,因為印表機GAP是『無法列印』的,因為他的會用的指令是『Feed』而不是『print 空白行』。

套印的方式,目前要搭配特定機種指與紙張,因為現在埔集的發票紙捲,普遍是『無定位mark』,所以實際上紙張最後會停在『哪個位置』是不一定的,而且在應用上『無定位mark』紙捲比較彈性,例如家樂福列印發票時,可以順便列印『明細』也是在同一捲紙捲上,而且明細會因為實際情況常短不一,不需要另外更換紙捲或是再準備一部印表機印明細,節省公司成本。

patrickuo 提到...

版主您好,
我們公司自建Turnkey與公司使用的ERP整合,
目前正在為電子發票列印程式頭痛,
可否提供您的程式碼做參考,
非常感謝。
EMail:patrickuo1028@gmail.com

mawping sheu 提到...
作者已經移除這則留言。
mawping sheu 提到...

電波大大 您好
我目前也在用PB開發電子發票列印
可否也寄給我原始程式讓在下參考一下寫法,
非常感謝,謝謝
E-mail: csecsv@hotmail.com

陳明華 提到...

To 蔡世珉、版主、Simon Hou:

web POS 系統方式,會如同Simon Hou 說的模式比較適合,建議在local端跑php 的service,去執行,這樣全部的執行過程都會在local本機上運作。如果想透過網頁呼叫本地端的PHP執行,可以搭建伺服器配合或是使用PHP內建的server(build in server)來達到。另外不同的OS有不同的使用方式,操作模式依據外接printer的port不同,會有各種不同的IO使用方式。最近研究的一些小心得分享一下。

但我自己遇到的部份是要如何輸出雙QR code,因為目前我只有測試到可以印出單QR code,無法在同一行上輸出多個不同的內容,希望可以跟版主索取您的程式碼研究這一部份。

我的信箱 pencil722@gmail.com

謝謝

WILDOX 提到...

Re: 陳明華 <5061323992142948025>

感謝您的經驗分享,信件已經寄出
一行只能輸出一個QR code問題應該是使用印表機指令比較常見問題,
C#是採用畫布製作比較不會有這問題。
若是印表機指令無法提供多QR code產生在同一個列印列上,就得找其他方法解決了。

陳玉惠 提到...

最近需用到電子發票列印,能否給CODE,
信箱bibi5928.chen@gmail.com

施佑學 提到...

您好,現在正在煩惱發票列印的問題,
可否提供您的程式碼作為參考,謝謝您!

Email: ysshih@gmail.com

Stephen 提到...
作者已經移除這則留言。
陳明華 提到...

To 版主:

先前提出的問題,一行無法輸出多個QR code,後來經過測試後,發現要先切換到page mode,接著就可以指定列印區塊列印方向等等,進而客製想要輸出的內容以及位置。提供給大家參考。

匿名 提到...

版主您好,
我剛開始學c# ,想製作電子發票,但毫無能力,
希望您可以分享您的統一發票列印小程式 source code,
讓我有機會學習,
真的非常感謝!

Email: jennycomes@outlook.com

祝 新年快樂!

WILDOX 提到...

Re: 陳明華 <1035989337931158525>

嗯嗯,原來如此,謝謝

HEI FEI 黑肥 提到...

您好,目前正在學系發票列印相關技術,
希望您能分享source code讓我參考學習
謝謝

Email:s15975304@gmail.com

匿名 提到...

您好,
我最近也在研究電子發票,可否分享source code給我。
感恩您無私地分享

Email : damn.good@msa.hinet.net

匿名 提到...

您好,
最近正在研究電子發票,請問您是否能分享Source code讓我參考?
感謝!

Email:Cray17292@hotmail.com

Simon Hou 提到...

Dear 版主,

對於之前提到上頭留白之議題, 研究結果是:
1.更訂firmwave方式: epson、star熱感機 安裝程式有提供省紙模式可將上頭及下頭留白省掉剩一點點, 另 partner熱感機 也提供firmwave直接更改上頭留白長度。
2.esc/pos方式: 在pagemode下送出打印命令印出整張發票後, 續接印圖案(或是打印NV LOGO), 再送切紙命令, 這時就會切在圖上頭, 也就變成下一張發票的圖預印在原上頭留白處了。

☆Eddie Chen★ 提到...

小弟也正在研究開立電子發票部分
可否大大提供SourceCode研究研究^^
Email:bda605@gmail.com
感謝

WILDOX 提到...

Re: Simon Hou <825416681257468796>

看來,這就是Windows驅動列印和直接指令列印的區別了,Windows驅動列印會把整包列印資訊送去列印後,再由韌體判定列印完畢送FEED指令把紙張推進到裁切區。此時『向前推進』就會造成GAP了。

然而ESC/POS指令可以不必告訴韌體『列印完畢』,也不必在裁切前『向前推進』,直接下達指令處理,可以很快,可以無視『紙張長度』概念,可以做到比較『細緻』的動作。

小安 提到...

最近可能需要用到電子發票的部分,如果方便的話可以請大大提供原始碼給我嗎?
我的mail是clark.lee@ftz.com.tw 謝謝您

jiunn tseng 提到...

目前在準備開發電子發票
可否提供您的程式碼作為參考,謝謝您!
jiunn3000@gmail.com
感謝!

Gerry 提到...

樓主有研究過Web Printing的方式了嗎? 我寫過用ActiveX方式控制了
但畢竟一定要用IE,目前也研究了HTML5 Canvas, JavaScript + Applet等等
但範例都不足, 而且未來IE也不支援ActiveX了, Chrome也將Java Applet
的移除, 所以除了HTML5 Canvas,不知道還有什麼方式可以做到Web Printing,
如果方便可以一起交流~謝謝。

gerryz@gmail.com

WILDOX 提到...

Re: Gerry <5009505151456777398>

您好,gerryz :
這個概念我是有研究過的,前面有幾位網友像是 Simon Hou、蔡世珉、陳明華
有回答這個方式,就是利用本機的 web 服務來處理
它的概念如下(流程圖):
https://drive.google.com/file/d/1zZJShokeYkGO85m4bcY_fDWGVYk-WXGu/view?usp=sharing

首先,使用PHP之類的程式(或自己撰寫WinSocket監聽服務)來啟用​本機的服務監聽,例如服務埠在 8888,在這裡面有一個可以接收POST上傳的 page 或是applet,當這個page或是applet接收POST上來的資料後,直接操控本機印表機,送出列印資訊。
因此,流程會如下:
1、當使用者需要列印發票時會透過瀏覽器向四發器發出請求(例如是表單submit/或是ajax post)。
2、伺服器返回發票要列印的相關訊息(資料)
3、瀏覽器接收到資料後轉發資料post到本機服務 http://localhost:8888/printlab.....(假設)
4、本機服務器接收到資料以後,由於是在本機(地),所以可以直接控制列印,此時就可以利用Win spool或是ESC/POS方式列印

因此,本地機器基本上要安裝這個本地HTTP服務最好是安裝成Windows服務形式且自動啟動,如果不是Windows服務形式的話就要使用者每次列印前要啟動這個HTTP服務。
這種方式目前是很多人用的方式,我舉過的例子像是 http://ai2.appinventor.mit.edu 本身就是利用這種方式來作到雲端開手機APP的方式。

匿名 提到...

Hello
即將準備開發電子發票功能
可否提供您的程式碼作為參考
謝謝您~
Email : dannymanningkimo@hotmail.com

匿名 提到...

Hello
正在開發電子發票功能
可否提供您的程式碼作為參考!謝謝您~
Email : sandra.chen@yfycpg.com

Wang D.J. 提到...

請問,關於24碼加密的部份,您是自行開發,還是使用國稅局的元件呢?

WILDOX 提到...

Re: Wang D.J. <5905131883486711289>

這部分要用國稅局的API去產生出來喔,因為HASH用的KEY在國稅局的程式裡面啊,一般是拿不到的。

Simon Hou 提到...

不知我對於電子發票整合服務平台加解密API使用說明書理解對不對,
1.營業人先登入財政部電子發票整合服務平台取得密碼種子,
2.再從服務平台的常用文件下載中下載電子發票QRCode說明文件.zip, 裡面有genKey.bat這支批次檔,
3.執行後輸入第一項的密碼種子, 即會執行同一資料夾裡面的geinv-kms-dist-1.0.1.jar中的com.tradevan.geinv.kms.dist.GenKeyWorker這個當初大平台開發者關貿用java開發的程式(GenKeyWorker.class), 再產生出QRCode要的營業人加密金鑰
4.並以此金鑰自行以AES加密演算法來加密資料。大平台再以營業人密碼種子反解出資料。

WILDOX 提到...

Re: Simon Hou <6328775570637328941>

前面3點大致沒問題,問題在第4點:
『自行以AES加密演算法來加密資料』
如果完全要以自製AES加密器除了KEY值你還會缺少IV值(初始化向量),因為我也不知道IV哪裡來。

建議你參考『電子發票整合服務平台加解密API使用說明書v1.12.pdf』(在電子發票QRCode說明文件(V1.6))裡面提供的方法:
財政部有提供DLL元件可以使用,輸入相關資訊(包含你的KEY)即可產生QR碼前面77碼(包含裡面的24碼加密)都是透過這DLL產生,比較保險與安全,文件裡面也提供了C與C#範例可以使用,相當方便。

Simon Hou 提到...

TO 版主,
該附件在 第伍章、參考用原始碼 檔案: tw\gov\nat\einvoice\qrutil\QREncrypter.cs
不是就有QREncrypter.DLL這支API的原始碼?跟反組譯後是一樣的。

余郡才 提到...

版主您好:
近期也有開發統一發票的需求、可否向您索取源碼
萬分感謝
bg920301@gmail.com

Wang D.J. 提到...
作者已經移除這則留言。
Wang D.J. 提到...

AES 加密的確是需要 iv 值,這點國稅局文件並沒有提到,但確實藏在國稅局提供的 Source Code 裡面,iv 值="Dt8lyToo17X/XkXaQvihuA==",我原本在 pl sql 裡面一直試不出來,發現這個祕密之後,加上 iv 就 pass 了。

( private final static String TYPE_SPEC = "AES";

/** The INIT type. */
private final static String TYPE_INIT = "AES/CBC/PKCS5Padding";

/** The SPEC key. */
private final static String SPEC_KEY = "Dt8lyToo17X/XkXaQvihuA==";)

版主可給我您的 Source Code 嗎?我需要把 Print Time 改掉,或是您已經有改過的版本?可以給我嗎?感謝!

djwang3388@gmail.com

匿名 提到...

我想了解您的程式, 可以請您寄給我 Source Code ? 謝謝 !!
e-mail: csh8466csh@gmail.com

WILDOX 提到...

Re:Wang D.J.<6089986900002208332>

感謝Wang D.J.提供的訊息

WILDOX 提到...

Re: Simon Hou <5479965096484340127>

下面Wang D.J.的回答是否能提供您一個研究方向,我是沒反組譯過所以無法回答您,抱歉

匿名 提到...

版主 您好,
想了解您的source code,可否向您索取?感謝
mail:j760829@hotmail.com

匿名 提到...

版主 您好,最近公司也在自行開發電子發票列印的東西遇到了一些列印的問題可否向您索取Source Code來研究一下?感謝
f1241766@gmail.com

Gerry 提到...

感謝版主之前回覆了Web Printing的概念,讓我有了新的Idea,目前正使用HTML5+WebSocket
的方式來達到Web Printing,待我完成了再與大家分享~

Jack Ou 提到...

一直苦腦 Vb6 寫不出來,如果有此方法也可以解決
麻煩大大給份 Source Code 參考,感激不盡
jack.oue@gmail.com

WILDOX 提到...

Re: Gerry <3581423260227649838>

謝謝囉

匿名 提到...

你好,請問可以給我core研究一下嗎
最近也在學習用C#來寫一個列印發票的程式

markk1933@gmail.com

謝謝。

Wang D.J. 提到...

版主好:
程式以雷射印表機印出來,非常完美,但改到熱感紙印表機之後,整個內容被等比例縮小,導致 QR_Code 無法辨識,看起來像是印表機左右有強制留白的緣故,請問有解嗎?

張庭偉 提到...

版主擬好:小弟近來也在開發電子發票的程式
發便也私訊一份程式提供給小弟參考嗎^^"
xpf43555x@gmail.com

WILDOX 提到...

Re: Wang D.J. <3030630762559803888>

列印比例出問題,通常比較會出現在印表機的紙張設定,如果您是『滿版列印』請調整印表機邊界到滿版,如果沒辦法,請廠商提供修改過的驅動程式或是使用第三方相容驅動程式,像是bartender有提供seagull驅動相容許多熱感印表機的驅動,該廠商區動可調邊界比原廠精細許多。
其二,印表機驅動設定是否有類似 fit to fill 或是 fill to page 這種『壓縮列印』,如果有請取消。
其三,如果上數都無法著手,就得從列印的版面下手,縮小列印版面(原底圖大小扣除無法列印的邊界),再去繪製圖文。
其四,像前面Simon Hou大留言的做法,他也是遇到紙張裁切發生的空白問題,最後請廠商修改調整Frameware才能處理了。

WILDOX 提到...

Re: Jack Ou <420048378954411786>

提供給您了,但是我的Source Code是C# .net,而您用的是VB6,開發工具與概念會很有差異性喔

邵乃俊 提到...

Hi 請問可以讓我參考一下你的程式碼嗎?
感謝您
我的email是shaojim12@gmail.com

提到...

您好!方便參考您的code嗎?
asd1234pk@gmail.com
感謝!

Unknown 提到...

您好
目前正在研究電子發票,對於您開發的程式很感到興趣。方便給我一份您的code 參考嗎?
感謝您
我的mail:jacky5900@gmail.com

匿名 提到...

電波哥 您好:
目前正在學習電子發票列印的問題,
由於沒這方面的Know How,
所以不知是否能請您分享Source Code可以作為參考研究學習,感恩。
eMail:twmars@outlook.com

匿名 提到...

你好~
最近也在研究電子發票的列印,
是否可以提供原始碼?
非常感謝~
我的email:sandy66.lu@gmail.com

匿名 提到...

你好,我目前發票列印功能都已做好了,可是一維條碼的部分,我的BarCode Reader一直讀不出來,我有嘗試使用過您另一篇文章的字型產出條碼(C39P24DhTt),但還是掃不出來,想請問您這方面是不是還有其他細節是需要注意的?

李文豪 提到...

電波大大,

懇請您提供原始碼給我,非常感恩!謝謝!
leew777777@gmail.com

黃煥松 提到...

您好,
請問一下,若列印完成後之裁切(因明細長度不一),
是否需用ESC/POS指令?或是有其他方式?謝謝~

WILDOX 提到...

Re: 黃煥松 <4636315957773429264>

裁切功能不屬於列印功能的特性,一般的列印指令並不支援,所以在C#裡面的PrintDocument沒有這種功能,如果要實現裁切動作,則必須使用印表機專用指令(ESC/POS就是其中一種)、第二種就是廠商驅動程式內提供的設定中有當指張列印完畢後的裁切功能設定、第三種是廠商另外提供的可呼叫批次程式(提供定功能)方式處理

WILDOX 提到...

Re: 匿名 <5182741802854588743>

這個條碼問題會有點複雜,首先瞭解這個發票用的條碼資訊長達 19 字元,在這種情況下條碼要塞進9公分寬度,加上左右至少要保留0.4~0.5公分,所以使用字型產生的條碼是沒辦法塞進去的,如果過度調整字型大小,會導致條碼粗細比例錯誤,導致無法掃描出來,所以我的做法是捨棄字型式的條碼,採用繪製方式重製條碼才不會有問題。

匿名 提到...

電波大你好,那我再請問一下,你繪製的意思是用Zxing.dll的方式做出一維條碼的嗎?
還是是使用其他方式?
因為我有試過Zxing.dll方式產出,但感覺條碼還是有沾黏的情況發生
如果方便的話可以用信件跟你討論這個問題嗎?
Email:ases11002@gmail.com

WILDOX 提到...

Re: 匿名 <7869700100876670542>

不,
在這個案例裡面,我沒有使用 Zxing 來產生一維條碼,我使用Zxing 是用來產生QR碼的
我產生一維條碼方式是用執接繪製處理
Code39碼本身並不複雜,不管是透過運算方式還是 預定義 方式都可以製作,
我個人選擇預定義方式,加快程式運行速度,我利用程式碼裡面518~617行的函數產生條碼圖形,再貼回主要繪製區

Unknown 提到...

可否提供原始碼, 非常感激, 謝謝!!
tzushow@gmail.com

黃煥松 提到...

Re: 黃煥松 <4636315957773429264>
感謝,將以ESC/POS 裁切

匿名 提到...

您好,可以給我一份原始碼嗎? 謝謝!!
chicheh@ymail.com

匿名 提到...

您好
方便與您聯絡並要code嗎?
jgenius.tw@yahoo.com.tw

匿名 提到...

您好
方便與您聯絡並要code嗎?
jgenius.tw@yahoo.com.tw

Tom Huang 提到...

目前公司在研究電子計算機發票轉換電子發票的工作,
希望有機會參考電波兄的程式, 謝謝.
我的email: twav8d@gmail.com

汪澤政 提到...

您好 最近我也在研究如何列印發票

不知道能不能拿你的程式參考一下怎麼寫

我的E-MAIL是 ts00139161@gmail.com

匿名 提到...

您好,最近公司要用電子發票,能否提供你的程式供參考,謝謝。
E-Mail:andy_su@ms1.url.com.tw

匿名 提到...

您好~~~小弟我最近也卡在code39解析度的問題
能否提供您的程式~~~想參考原理
email: sh932111@gmail.com
感謝您~~~

吳建州 提到...

您好,最近公司要用電子發票,因開發程式遇到些問題可否提供你的程式參考謝謝。
E-Mail:james.wu27@icloud.com

楊宏彬 提到...

大大...您好,最近公司要用電子發票,因開發程式遇到些問題可否提供你的程式參考謝謝。
E-Mail:jasonyang5194@gamil.com

徐進發 提到...

您好~
目前正在研究電子發票程式,
是否可以提供原始碼?
非常感謝~
我的email:shyu0817@yahoo.com

匿名 提到...

您好,
最近公司在導入電子發票,因開發程式遇到一些問題可否提供source code參考,感謝。
mail:hannawang0918@gmail.com

匿名 提到...

您好:
想要研究一下發票列印,請問是否可提供source code參考,謝謝
mail : jjchiang0730@gmail.com

Nickcat Wang 提到...

嗚嗚嗚,搞了半天都弄不出來,好不容易找到您的blog
可以厚著臉皮跟您申請一份source code嗎?
小弟的email: nickcatwang@gmail.com


樓主好人一生平安 感謝大大無私的分享~

Unknown 提到...

大大您好:
有幸在此看到大大所寫的blog,不知是否也能請您提供Source code給小弟參考一下
email:k66lai@yahoo.com.tw

非常感謝您~

匿名 提到...

可煩請大大也提供SourceCode給小弟嗎?
感恩 Mail: andrewdsc@gmail.com

ken chen 提到...

您好,
最近要在導入電子發票,請寄給我參考,感謝。
ken@apcbox.com

汪澤政 提到...

您好,想請教一下大大
關於程式裡面ItoC這個變數的值是怎麼來的呢?
為什麼要設定成2.54來算寬跟高?
直接經過多次測試來取得最佳的寬跟高會比較沒效率嗎?

WILDOX 提到...

Re: 汪澤政 <6814895552941570474>

Hi 您好:

ItoC 就是 inch to cm 的縮寫 = 1英吋 = 2.54 公分 的意思
喔~~

匿名 提到...

您好:
最近也在研究此功能,不知是否也能提供code
perfect62007@gmail.com

謝謝~~~~~

匿名 提到...

您好,想請教一下大大
最近要在導入電子發票,請寄給我參考,感謝。
s499715060@gmail.com

匿名 提到...

感謝版主的無私發表,目前也在導入電子發票,雖然使用別人以完成的DLL,
但也希望自己可以研究一下,所以拜求格下的code參考一下,謝謝!!
請寄jeffwang@ms1.url.com.tw

高宏鑫 提到...

您好,

也是剛開始要開發電子發票.....想跟您要下source code, 非常感謝.

hongsingkao@gmail.com

匿名 提到...

剛接觸熱感列印機
希望能夠參考一下,感謝
frank.chen@rocketman.ninja
謝謝