首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

醫療場景:刷就診卡自動生成條碼標簽並打印的完整實現鏈路

     編輯:程式設計綜合問答

業務流程

  1. 患者刷卡 → 讀卡器(鍵盤模式/串口)輸入卡號。
  2. 系統查詢 HIS/EMR 獲取患者信息(姓名、性別、年齡、就診號)。
  3. 本地生成 Code128/QR Code 條碼圖片(含就診號)。
  4. 合成標簽:條碼 + 患者文本信息 → 統一圖片/打印模板。
  5. 發送到標簽打印機(TSC/Zebra/得實)或 A4 打印機。

技術選型對比

方案核心組件優點缺點
純圖片合成 + GDI+ 打印ZXing.Net 生成條碼 + Graphics.DrawImage 合成 + PrintDocument無需驅動開發,通用性強打印精度受 DPI 影響,條碼識讀率略低
打印機指令語言 (TSPL/ZPL/EPL)拼接指令字符串 → RawPrinterHelper 發送打印機內部渲染,條碼極清晰,速度極快需針對打印機型號調試指令
報表控件FastReport / Stimulsoft / Crystal Reports所見即所得設計、支持複雜版面部署體積大、授權成本高

推薦:TSPL 指令直發方案(以 TSC 打印機為例)

// 1. 構建 TSPL 指令
string tspl = $@"
SIZE 50 mm, 30 mm
GAP 2 mm, 0
DIRECTION 1
CLS
TEXT 10, 10, ""3"", 0, 1, 1, ""{patient.Name}"" 
TEXT 10, 40, ""3"", 0, 1, 1, ""性別:{patient.Gender}  年齡:{patient.Age}""
BARCODE 10, 70, ""128"", 50, 1, 0, 2, 2, ""{patient.VisitNo}""
PRINT 1, 1
";

// 2. 發送到打印機 (Raw Print)
public static void SendToPrinter(string printerName, string data) {
    var bytes = Encoding.GetEncoding("GB2312").GetBytes(data);
    IntPtr hPrinter;
    OpenPrinter(printerName, out hPrinter, IntPtr.Zero);
    StartDocPrinter(hPrinter, 1, new DOCINFOA { pDocName = "Label", pDataType = "RAW" });
    StartPagePrinter(hPrinter);
    WritePrinter(hPrinter, bytes, bytes.Length, out _);
    EndPagePrinter(hPrinter);
    EndDocPrinter(hPrinter);
    ClosePrinter(hPrinter);
}

關鍵優勢

  • **無圖片轉換損耗**,條碼由打印機 203/300 DPI 直接渲染,掃碼槍 100% 識讀。
  • **極快**:單標簽 < 100ms,適合高峰期排隊場景。
  • **易維護**:修改版面只需調整指令坐標,無需重新編譯 UI。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved