零驱动 TSC 打印机 USB 中间件 - 模板化打印 | RESTful API | 开箱即用
English | 简体中文
TSC-Print-Middleware 是一个零驱动 USB 打印中间件,专为 TSC 热敏标签打印机设计。基于 Python 和 FastAPI 构建,提供 RESTful API 实现模板化标签打印,支持文本、条形码和二维码。无需安装驱动程序,通过 USB 直接通信。适用于 Windows 平台的仓库管理、库存系统、物流自动化和资产标签打印场景。
核心技术: Python 3.10+ | FastAPI 0.120 | USB 通信 | TSPL 打印语言 | 模板引擎
- 🚀 零驱动 - 无需安装打印机驱动,USB 直接通信
- 🎨 模板系统 - 5 种预设模板 + 完全自定义布局
- 🌐 RESTful API - FastAPI 提供标准 HTTP 接口
- 🇨🇳 完美中文支持 - Windows 宋体字库
- 📦 开箱即用 - pip install 一键安装
- 🔧 高度灵活 - 从简单到复杂,满足各种需求
┌─────────────────────┐
│ │
│ 单行文本居中 │
│ │
└─────────────────────┘
┌─────────────────────┐
│ 第一行文本 │
├─────────────────────┤
│ 第二行文本 │
└─────────────────────┘
┌─────────────────────┐
│ ████████████ │
│ ██ QR CODE ██ │
│ ████████████ │
│ │
│ 产品名称 │
└─────────────────────┘
- ✅ 仓库物料标签打印
- ✅ 商品条码/二维码打印
- ✅ 快递单号打印
- ✅ 资产管理标签
- ✅ 库存盘点标签
- 操作系统: Windows 10/11
- Python: 3.10 或更高版本
- 打印机: TSC 系列打印机(USB 连接)
- 系统依赖: VC2015-2022 x86 运行库
git clone https://github.com/你的用户名/TSC-Print-Middleware.git
cd TSC-Print-Middlewarepython -m venv venv
venv\Scripts\activatepip install -r requirements.txtpython main.py服务将在 http://localhost:8000 启动
访问 http://localhost:8000/docs 查看交互式 API 文档 📖
TSC-Print-Middleware 提供 5 种打印模板,从简单到复杂,满足各种需求。
单行文本水平垂直居中
import requests
requests.post("http://localhost:8000/print", json={
"template": "single-text",
"print_list": [
{"text": "物料编号: A12345"}
]
})每张纸打印两行文本(上下布局)
requests.post("http://localhost:8000/print", json={
"template": "double-text",
"print_list": [
{"text1": "第一行文本"},
{"text2": "第二行文本"}
]
})二维码在上,文本在下,中心对齐
requests.post("http://localhost:8000/print", json={
"template": "qrcode-with-text",
"print_list": [
{
"qrcode": "https://example.com/product/12345",
"text": "产品编号: 12345"
}
]
})条形码在上,文本在下,中心对齐
requests.post("http://localhost:8000/print", json={
"template": "barcode-with-text",
"print_list": [
{
"barcode": "1234567890",
"text": "订单号: 1234567890"
}
]
})高级用户可以完全控制每个元素的位置和样式
requests.post("http://localhost:8000/print", json={
"template": "custom",
"layout": {
"width": 100,
"height": 80,
"elements": [
{
"type": "text",
"x": 100,
"y": 100,
"text": "自定义标题",
"font_size": 56,
"font_name": "宋体"
},
{
"type": "qrcode",
"x": 300,
"y": 300,
"content": "https://example.com",
"size": 10
},
{
"type": "barcode",
"x": 100,
"y": 600,
"content": "123456789",
"height": 80,
"barcode_type": "128"
}
]
},
"qty": 1
})curl http://localhost:8000/curl http://localhost:8000/healthcurl -X POST http://localhost:8000/test详细文档请查看 API.md
在 config.py 中修改默认纸张尺寸:
DEFAULT_WIDTH = "100" # 标签宽度(mm) - 10cm
DEFAULT_HEIGHT = "80" # 标签高度(mm) - 8cm根据你的打印机型号调整 DPI:
# TTE-344/345 (300 DPI)
DPI_RATIO = 11.81 # dots per mm
# TTP-244/247 (203 DPI)
# DPI_RATIO = 8.0
# TTP-644 (600 DPI)
# DPI_RATIO = 23.62修改预设模板的字体大小、间距等参数:
# single-text & double-text
TYPE1_FONT_HEIGHT = 56 # 字体高度
TYPE1_FONT_NAME = "宋体"
# qrcode-with-text & barcode-with-text
TYPE2_FONT_HEIGHT = 48
TYPE2_QR_SIZE = 12 # 二维码大小┌─────────────────┐ HTTP/JSON ┌──────────────────────┐
│ 前端应用 │ ─────────────────> │ FastAPI Service │
│ (任何语言) │ │ TSC-Print-MW │
└─────────────────┘ └──────────────────────┘
│
│ pythonnet
│ + tsclib
▼
┌──────────────────────┐
│ TSC Printer │
│ (USB Connection) │
└──────────────────────┘
核心技术栈:
- FastAPI - Web 框架
- pythonnet - Python 与 .NET 互操作
- tsclib - TSC 打印机控制库
所有模板都支持批量打印:
# 批量打印10个二维码标签
requests.post("http://localhost:8000/print", json={
"template": "qrcode-with-text",
"print_list": [
{"qrcode": f"https://example.com/{i}", "text": f"产品-{i}"}
for i in range(1, 11)
]
})- 原点: 左上角 (0, 0)
- 单位: dots(点)
- 转换公式:
dots = mm × DPI_RATIO - 示例: 100mm × 11.81 = 1181 dots (300 DPI)
{
"type": "text",
"x": 100, // X坐标 (dots)
"y": 100, // Y坐标 (dots)
"text": "文本内容",
"font_size": 48, // 字体大小 (12-120)
"font_name": "宋体" // 字体名称
}{
"type": "qrcode",
"x": 200, // X坐标
"y": 200, // Y坐标
"content": "二维码内容", // URL或文本
"size": 10 // 单元宽度 (1-10)
}{
"type": "barcode",
"x": 100, // X坐标
"y": 400, // Y坐标
"content": "123456789", // 条形码内容
"height": 80, // 高度 (30-300)
"barcode_type": "128" // 类型 (128, EAN13等)
}TSC-Print-Middleware/
├── main.py # FastAPI 应用入口
├── printer.py # 打印机核心模块
├── config.py # 配置文件
├── requirements.txt # 依赖管理
├── test_print.py # 测试脚本
├── README.md # 项目说明
├── API.md # API 文档
├── LICENSE # MIT 许可证
├── CHANGELOG.md # 变更日志
├── CONTRIBUTING.md # 贡献指南
└── examples/ # 示例代码
├── python_client.py
└── javascript_client.js
欢迎贡献!请查看 CONTRIBUTING.md 了解详情。
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
问题: 提示 "USB 打印机连接失败"
解决:
- 检查打印机是否通过 USB 连接到电脑
- 确认打印机电源已开启
- 检查 Windows 设备管理器中是否识别到打印机
问题: 打印的中文显示为乱码或方块
解决:
- 确认 Windows 系统已安装宋体字库
- 检查 Python 环境编码为 UTF-8
- 在 config.py 中尝试其他中文字体(如"微软雅黑")
问题: 打印内容位置不准确
解决:
- 检查 DPI_RATIO 是否与你的打印机型号匹配
- 执行纸张校准:
python -c "from printer import calibrate_paper; calibrate_paper()" - 调整 config.py 中的 PRINT_MARGIN 参数
问题: pip install -r requirements.txt 失败
解决:
- 确保已安装 VC2015-2022 x86 运行库
- 使用管理员权限运行命令提示符
- 尝试单独安装 pythonnet:
pip install pythonnet==3.0.5
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
- 问题反馈: GitHub Issues
- 功能建议: GitHub Discussions
⭐ 如果这个项目对你有帮助,请给个 Star!