發表文章

C# 列印純黑白圖像要點

給自己備註的 如果使用的是條碼印表機列印圖像,由於條碼印表機沒有所謂顏色深淺的特性 其不是黑(Black)就是白(non-Black),如果要列印圖像(像是標籤上的LOGO), 圖片若是彩色的情況就會出現像是毛邊的點。 解決的方式就是要將圖片做灰階的二階化(threshold) 下面這個方法可以先產生一個二階化圖像的ImageAttributes:         static ImageAttributes BWThreshold(Image sourceImage, float ThresholdLevel)         {             var gray_matrix = new float[][] {                 new float[] { 0.299f, 0.299f, 0.299f, 0, 0 },                 new float[] { 0.587f, 0.587f, 0.587f, 0, 0 },                 new float[] { 0.114f, 0.114f, 0.114f, 0, 0 },                 new float[] { 0,      0,      0,      1, 0 },                 new float[] { 0,      0,      0,     ...

統一發票列印小程式

圖片
1、請注意本版留言過多, 您的留言可能不在這一頁,請到以下留言樓層看看再回應喔~  2、如果您有填寫表單,卻沒有收到我的郵件,有可能您填寫的電子郵件有錯誤,麻煩您查看一下留言是否有我給您的信息喔。因為我沒辦法直接連繫到您。 1 ~200 則,請按這裡   200+ 以上請按這裡 因為公司會在一堆系統上都有可能要印發票(真不懂要怎麼搞?) 希望可以有個小工具可以列印電子發票, 原本發票列印程式要使用條碼機專用語言(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.筆式(pen): 它是我最早接觸的條碼讀取器,每次都看到操作人員拿著它在條碼上『磨來磨去』挺有趣的。它其實是由LED和光電二級管、透鏡組合而成。 由筆管內LED發射光源到前端(筆尖)的透鏡打到紙面上,然後由紙張的反射(黑色吸光、白色反光)再由透鏡返回內部光電二級管來接收訊號。其實這個原裡你都可以在光學滑鼠上面看到,因為它也是利用這個原裡來偵測移動的。 優點:目前已經想不到了(快被淘汰了,可能某些場合還用得著吧)。              雖然有改良非接觸型和便攜型,但也快消失了。 缺點:A、在條碼上移動速度必須保持一致,否則會讀不到。             B、透鏡是直接接觸紙張,所以長時間會磨損,當磨損太嚴重就會無法讀取。             C、條碼常常會被以磨損的鏡片磨破。             D、條碼密度不能太高。             E、無法掃瞄『非反射式』條碼(螢幕)。 2、CCD式:

【研究】列印的條碼為什麼很難刷(掃描)

圖片
條碼在我們的世界無處不在,小至發票,大至大型裝置設備都會有它的身影。 每一家有制度化的公司,多少都會需要用到條碼來進行管理,身為開發人員,就很難不會碰到它。 但是我們常常因為不熟悉條碼的規則,而導致作出來的條碼沒辦法被讀取(掃描),也常遇到A設備可以讀取,B設備就無法讀取的奇怪現象,當然讀取設備本身的讀取元件也是有功力上的差別,有些廠商有能力可以調教讀寫元件的設定。 接下來,我就做點實驗給大家知道這個條碼的問題出在哪裡,以便在往後使用條碼時可以更注意到發生的原因。 在這裡我不再重述條碼的來由,這次的比較是使用大家常用的Code39(又稱39碼)來比較。 使用39碼得主要是因為他有字型檔可以使用,可以拿來做比較。 條碼的列印方式分類與優缺: 一、由條碼機(又稱標籤機)內建指令列印 優點:線條清晰,掃描讀取容易、速度快。             列印特殊紙張(背膠式、連續型.....) 缺點:特殊的指令語言(每一個廠牌都不太一樣),等於換機器就要改寫程式碼。             有一些貼心的廠商(精聯)會提供比較簡單的統一語言列印工具,減少開發者困擾。             版面變化較少,沒有視覺化編輯。 二、由Windows Driver列印,或稱普通列印 優點:只要有驅動程式就可以列印,不需要改寫程式(或改寫幅度小)。            版面彈性比較自由。由於只要有驅動就可以列印,            所以比較不限定紙張種類,或印表機種類。 缺點:列印線條有很多模糊地帶,沒控制好就會導致無法讀取。            受到列印裝置解析度限制,匹配沒做好就會失敗。 底下先做出三種情境比較: 雷射印表機:600DPI 條碼印表機(標籤機):203DPI 這裡,我們先 比較印表機解析度的列印差異 ,請忽略機器種類。

簡易條碼產生器2 easy Barcode Genarator

圖片
本偏延續上一篇 『簡易條碼產生器』 的修改版 新增了指令列模式(Console Mode),方便給其它程式呼叫使用 下載位置: https://drive.google.com/drive/folders/0BybxVRTRlzdLbkVFc0JuM3JyS0E 必須有.net 2.0 以上環境(Windows 7以上作業系統不需要) 解壓縮密碼(如果需要):http://radio-idea.blogspot.tw 指令: usage barcodegenwin.exe [-command:value] ||[-command] -w,-width : integer value , specified picture width pixeles -h,-height : integer value , specified picture height pixeles -bc,-barcode : barcode type , qrcode/pdf417/code39/code128/codabar                         if codabar the data text should start/end with A,B,C,D charcater,                         if code39 the data text only accept Arabic number and upper letter -txt,-text : string value , use data text to genarate barcode -out,-output : picture file name , specified this file name to save barcode picture,                    suppo...

簡易條碼產生器

圖片
這是利用ZXing套件開發的,需要自己產生條碼的使用者,可以利用這個程式自己產生。 下載位置: https://drive.google.com/file/d/0BybxVRTRlzdLWUlBeGtKQXFKLVk/view?pref=2&pli=1 多行版本: https://drive.google.com/file/d/0BybxVRTRlzdLV1FQbmcxLUxZWDQ/view?usp=sharing 必須有.net 2.0 以上環境(Windows 7以上作業系統不需要) 解壓縮密碼(如果需要):http://radio-idea.blogspot.tw 可以自製QR碼、PDF417、code 39碼、code 128碼、Codabar碼,並且儲存成圖片檔

如何退出被系統鎖住的外接式磁碟機

圖片
適用於Windows 7以上版本 明明都已經把所有程式給關閉了,但是要安全退出USB外接硬碟時,卻一移無法退出。 使用Unlocker、USB Remover等軟體,確是 一直提示被『系統』使用中 。 (這個系統又不是任何外裝軟體也不知道怎麼停止它) 而且, 不管使用任何強迫終止程序手段都沒有用! 此時使用Open File View檢查會發現像是下面的東西被『系統』鎖住: $Extend\$RmMetadata\$TxfLog\$TxfLogContainer00000000000000000001 此時,我測試過最有效的方法就是使用 Diskpart 來處理 先開啟『命令提示字元』,或是到『執行』輸入cmd.exe 注意,如果您的電腦使用權限不是『系統管理員』身分,請切換到管理員身分執行,或是以滑鼠右鍵『以系統管理員身分執行』! 1.輸入 Diskpart,進入工具模式 2.輸入 List Disk,顯示出本機所有磁碟機,這些磁碟機會以1、2、3的編號出現 3.輸入Select Disk n,這個n是你要退出的磁碟機編號 4.輸入 Offline Disk ,則可以退出此磁碟機 範例畫面: 注意! 在這之後,你的USB外接式硬碟再度裝回此部電腦時,可能不會再出現磁碟機代號。 此時可以到『裝置管理員』>『磁碟管理』,會發現這部磁碟機變成了『離線』狀態。 那要如何恢復呢? 有兩種方式: 一、使用磁碟管理,在該硬碟機上按滑鼠右鍵,跳出選單,點擊『連線』項目 二、使用Diskpart管理工具:   1.輸入 List Disk,顯示出本機所有磁碟機,這些磁碟機會以1、2、3的編號出現   2.輸入Select Disk n,這個n是你要退出的磁碟機編號   3.輸入 Online Disk ,則可以重新連接此磁碟機