--- title: '熱印表機使用方法' disqus: hackmd --- 熱印表機使用方法 === ## 下載驅動程式 到WinPos公司官網下載WP-K833 thermal printer的驅動程式,有兩個,兩個都下載。官網網址如下: http://www.winpos.com.tw/admin/download_tc/front/download.php ![](https://i.imgur.com/l7iGjhS.png) ## 安裝驅動程式 1. 首先執行USB_CDC_Drivers 2. 執行POSPrinter_Drivers,在下表選擇"以手動設定新增本機印表機或網路印表機" ![](https://i.imgur.com/dOTNOTN.png) 3. 找到印表機連接到本機的哪個PORT,選取該PORT並安裝。 4. 按下試印紐,如果有成功印出東西表示驅動程式安裝成功。 ## 程式碼簡易教學 我把取票機範例專案放在NAS的/volume1/git/Printer裡 在FormWPelnvoiceTest.cs中有影印出取票單的範例,以下將講解該程式碼架構 ```C#= new FormWPeInvoiceTest("王小名", "0456", "COM3"); ``` > 這是呼叫影印號碼牌的class,裡面的兩個參數分別是病患的名字與號碼編號,若沒有名字則輸入空字串,以及連接印表機的本機連接阜。 ```C#= static SerialPort com = new SerialPort(); // initial com parameter com.PortName = comname; com.BaudRate = 9600; com.Parity = Parity.None; com.DataBits = 8; com.StopBits = StopBits.One; com.Handshake = Handshake.None; string caption = "COM Port Error"; string message = ""; // check com hardware handshaking com.Open(); ``` > com用來控制連接印表機的連接阜,在這個例子中印表機連接到本機的COM3連接阜,因此PortName取作"COM3"。 ```C#= // printer command define ------------------------------------------------------ const string SelectPageMode = "\x1B" + "\x2"; const string PrintAndCancelPageMode = "\x1B" + "\x3"; const string PrintNvImage = "\x1C" + "p" + "\x1" + "\x0"; // Position Control Functions ------------------------------------------------------ const string SetAbsolutePrintPosition16Dots = "\x1B" + "$" + "\x10" + "\x0"; const string SetAbsolutePrintPosition40Dots = "\x1B" + "$" + "\x28" + "\x0"; byte[] SetAbsolutePrintPosition208Dots = { 0x1B, (byte)'$', 208, 0 }; byte[] SetAbsolutePrintPosition248Dots = { 0x1B, (byte)'$', 248, 0 }; // cut Control Functions ------------------------------------------------------ const string PartialCut1 = "\x1B" + "m"; const string FeedPartialCut1 = "\x1D" + "VB" + "\x0"; // Font Control Functions ------------------------------------------------------ const string SelectGlobalFontW1H1 = "\x1D" + "!" + "\x0"; const string SelectGlobalFontW1H2 = "\x1D" + "!" + "\x01"; const string SelectGlobalFontW2H2 = "\x1D" + "!" + "\x11"; const string SelectGlobalFontW3H3 = "\x1D" + "!" + "\x22"; const string SelectFontBoldMode = "\x1B" + "E" + "\x1"; const string CancelFontBoldMode = "\x1B" + "E" + "\x0"; // Paper Feed Functions ------------------------------------------------------ const string PaperFeed24Dots = "\x1B" + "J" + "\x18"; const string PaperFeed12Dots = "\x1B" + "J" + "\x0C"; const string PaperBackFeed100Dots = "\x1B" + "K" + "\x64"; const string PaperBackFeed31Dots = "\x1B" + "K" + "\x1F"; const string PaperBackFeed72Dots = "\x1B" + "K" + "\x48"; // Align Format Functions ------------------------------------------------------ const string SelectAlignLeft = "\x1B" + "a" + "\x0"; const string SelectAlignCenter = "\x1B" + "a" + "\x1"; const string SelectAlignRight = "\x1B" + "a" + "\x2"; // 1D Barcode Function ----------------------------------------------------------- const string SelectBarCodeWidthDot1 = "\x1D" + "w" + "\x1"; const string SelectBarCodeHighDot48 = "\x1D" + "h" + "\x32"; const string PrnBarCode39EndByNull = "\x1D" + "k" + "\x4"; // QR Code Function ----------------------------------------------------------- const string SelectQrCodeSize3Dot = "\x1D" + "(k" + "\x3\x0\x31\x43\x3"; const string SelectQrCodeSize4Dot = "\x1D" + "(k" + "\x3\x0\x31\x43\x4"; const string SelectQrCodeErrorCorrectionLevelL = "\x1D" + "(k" + "\x3\x0\x31\x45\x30"; const string SelectQrCodeVersion6 = "\x1D" + "(k" + "\x3\x0\x31\x76\x6"; const string QrCodeDataStoreLeading = "\x1D" + "(k" + "\x3\x0\x31\x50\x30"; const string QrDataPrint = "\x1D" + "(k" + "\x3\x0\x31\x51\x30"; ``` > 這些都是用來控制印表機的指令,例如SelectGlobalFontW2H2就是用來調整字體大小為兩倍的指令,而那些字串的意義可以在官網給的操作手冊上查到。下突為官方調整字體大小的指令說明。 ![](https://i.imgur.com/VlL4uCk.png) ```c#= // 以下資料需在整頁模式運作 ----------------------------------------------- string ss = "\n\n\n\n"; ss += SelectPageMode; //整頁模式 ss += SelectAlignCenter; //文字置中 ss += PrintNvImage; //列印logo, logo須事先下載, 若無logo則忽略 ss += SelectGlobalFontW2H2; //文字兩倍寬兩倍高 ss += "佳里奇美醫院檢驗科\n"; ss += "抽血站採檢號\n\n\n"; ss += SelectGlobalFontW3H3; //文字兩倍寬兩倍高 ss += SelectFontBoldMode; //文字加粗 ss += numbers + "\n"; ss += names + "\n\n\n"; ss += CancelFontBoldMode; //文字取消加粗 ss += SelectGlobalFontW2H2; //文字兩倍寬兩倍高 ss += "號碼非採檢順序\n請依叫號耐心等候\n"; ss += "錯過號碼,請重新取票\n\n\n"; ss += SelectGlobalFontW1H1; //文字回復正常 ss += System.DateTime.Now.ToString(); ss += PrintAndCancelPageMode; //列印並取消整頁模式 ss += "\n\n\n\n\n\n"; //送行 ss += FeedPartialCut1; //切紙 byte[] bb = System.Text.Encoding.GetEncoding("Big5").GetBytes(ss); com.Write(bb, 0, bb.Length); ``` > 上面是列印出所設計字串的程式碼,把要印的東西編成字串後,再以BIG5加密,最後再用COM3輸出。