现在已经浪费了 4 米纸卷…… 使用的是得力的机器,目前用官方给的标签打印软件倒是工作一切正常。 目前需求是 Electron 调用这台打印机打印一些带有一维码的标签, 标签尺寸为 40mm*30mm,水平 2 列,纸袋宽度约 82mm,纸张间距约为 1.5mm 现在尝试了: Word:无论如何都会莫名其妙旋转 90 度导致打印出现问题 Electron:
content.print() - web 页面单位均已使用 cm,打印页面尺寸如果设置为 8.1*3.15cm,页面会被切分成无数的块 print 以及 node-print 在 electron 下,无法正常调用 DLL
想问下 V2EX 这里有没有开发过标签打印软件的老司机指条明路,怎样才能让标签 正常 打印出来…… 先感谢一波……毕业设计要严重超时了……
题外话提一句:怎么治宿舍里疯狂抽烟打游戏大吼大叫的室友……
1
zhenjiachen 2018-10-22 05:10:09 +08:00 via iPhone
我搞过 tsc 打印机打印二维码打印,打印图片怎么都会出现问题,但是用 tsc 提供的工具就不会,因为这种打印机只能用代码发送命令,而不支持直接打印图片
|
2
CEBBCAT 2018-10-22 05:31:40 +08:00 via Android
没看懂
|
3
egen 2018-10-22 05:43:50 +08:00 1
小票打印机我用的 escpos,图片也可以打印
标签打印机不确定是否通用,可以试试 |
4
ca1123 2018-10-22 05:54:29 +08:00 1
官方没有 SDK 么?这玩意什么原理?和普通打印机一样么?
|
5
Handle OP @zhenjiachen 请问是 TSC 官方提供了 api 么?
@CEBBCAT 需求是打印一些标签,标签中含有条码 @egen escpos 么?感谢,我会去找找试试的 @ca1123 按照得力官网来看,目前是没提供 sdk 之类的,只提供了一些专业标签条码打印软件……系统识别确实是普通连供纸打印机 |
7
Handle OP |
9
kokomo 2018-10-22 06:44:40 +08:00 via Android
标签字,我只推荐 Brother
|
10
Handle OP @kokomo 最后希望实现的需求是希望能够适配不同打印机,在 Electron 中配置尺寸和信息后直接开打……所以机器型号啥的…… Brother 就嫌不奢求了吧
|
11
jfcai 2018-10-22 07:31:08 +08:00 via iPhone 1
标签打印一般有两种方式:
1、驱动打印,与普通打印机一样通过驱动方式打印。 2、通过指令打印,不同厂家的的打印机指令集不一样,可查看厂家提供的手册。 |
12
zxq2233 2018-10-22 07:38:48 +08:00 1
已经有很成熟的商业解决方案 nicelabel。
当然可以有办法免费使用。 不懂 Electron,不过之前我使用 web 技术做过标签打印系统。 使用纯 javascript 实现, 设置网页大小为标签纸张尺寸(参考 http://jsfiddle.net/2wk6Q/3/)可以通过 js 动态生成连续这个页面。 使用 css 布局标签上的内容,边距可以通过 padding 和 margin 控制。 通过 js 变量生成连续编码。一二维码可以调用 js 库进行生成。 然后调用 window.print();打印。 |
13
OpenJerry 2018-10-22 07:40:26 +08:00 via Android 1
回答最后一个问题:加入一个社团,然后一天到晚都在实验室混就行了,我就是这样,该睡觉了才回宿舍
|
14
zxq2233 2018-10-22 07:46:07 +08:00
|
15
zxq2233 2018-10-22 07:47:38 +08:00 via Android
你愿意学
|
18
Handle OP @zxq2233 刚才测试了一下,很感谢!虽然这个里面似乎对于 mm 的支持很差……但是至少终于可以在偏移不算离谱的情况下生成和打印少量标签了。不过这个和其他软件(例如 Word )具有相同问题,打印长度必须大于宽度……不知道怎样才能解决掉……
|
19
yyss8 2018-10-22 08:42:15 +08:00
用 Html 排版个静态文件 然后用 chrome 打开看看能打印吗
electron 自带的如果 Html 能打出来就能打出来 不然可能就要借用点第三方库了 |
20
Handle OP @yyss8 都能打印,但就是和前文描述的一致,一旦页面高度小于宽度,整个页面打印的横向竖向就会翻转
刚才在 word 又试了一会,发现 word 里面在页面高度小于宽度时会自作主张地把横竖向翻转,这样就导致了标签打印方向错误。猜测别的程序也有类似螺丝 |
22
sunorg 2018-10-22 08:51:34 +08:00 via Android
刚开发一个打印软件。用 pyqt 做成独立程序,可以打印图片,pdf,或者 html(不带图)。执行完美
|
24
drquest 2018-10-22 09:00:36 +08:00
类似的事情我们做过,基本上不建议你在 Chrome 引擎里搞这些事情,因为 Web 标准打印相关的实现本来就很弱,加上浏览器引擎会自带一些 border 设置,基本上都会乱套,你可以考虑 html2canvas 之类的把要打印的内容先转位图再送进标签打印机,这样至少可以保证内文不乱。或者干脆写个 Windows service,大多数的打印机提供.Net 和 Java 的 SDK,开发起来方便很多。
标签打印 SDK 最完善的是 zebra,我不建议你用没有 SDK 的型号自己 hack,从项目的角度讲增加很多成本和风险,比较得不偿失。 |
25
09apple 2018-10-22 09:11:44 +08:00
旋转 90 度...是不是打印方向跟你预期的不一样- -
|
26
Handle OP @sunorg 请问方便详细说说么?
@yyss8 Word,如果在页面高度高于宽度,页面设置为纵向,印刷一切正常 如果高度小于宽度,无论横纵印刷均为旋转 90 度 @drquest 谢谢!确实一开始就是打算把要打印的内容转为图像再打印出来,于是才先在 Word 一类的软件中尝试正常打印一场宽度 8cm 高度 3cm 左右的内容。关于机器的选用,理由很简单……穷学生只是想尽量省钱来入手一台热转印机……一开始没有考虑太多,错误地估计了这部分的难度……现在可能确实需要想办法 hack …… 而且还有一点就是……明明都有专门的软件适配多种不同型号……其中应该也不会使用太多不同机种 api,我也很好奇这些软件地实现 |
28
rockyou12 2018-10-22 09:21:24 +08:00
@drquest lz 这个需求用 electron 没问题的,electron 的主进程是 node 运行时,调 dll 什么的完全没问题。我司现在在做个 pos 打印相关的项目,也是 electron 没什么坑。lz 其实能找到其他语言的库写了然后用 node 调就行了
|
29
drquest 2018-10-22 09:29:14 +08:00
@Handle 得力的这个机器很可能是贴牌的,你从驱动里找一下字符串或者从 device_id 或者拆开看一下主板找一下它是哪一家 OEM 的,基本上上游厂家都会给 SDK,国内很多小厂牌收据打印机都是贴牌芯烨 Xprinter 的,你可以找找看。
|
30
egen 2018-10-22 09:30:23 +08:00
@Handle #8
这个库编译比较麻烦,如果中途出错,最好清掉重新来一遍 权限不记得了,当时是在 win7 上编译和使用的,默认就是 administrator 权限 理论上只要普通的 usb 驱动可以识别到打印机就可以,因为走的是 ESC/POS 协议,应该符合标准的打印机都可以使用的 |
31
Handle OP |
32
Handle OP @drquest 此外,excel 可以正常地打印和布局……如果可以实现 excel 的打印效果也就不需要限定打印机型号就能打印了……我个人更希望能这样,笑
|
33
yyss8 2018-10-22 11:12:03 +08:00
@Handle 说明只是 word 的问题 如果考虑 electron 就试试 html 咯
electron 自带的能用的库我之前找的只找到 node-printer 和自带的 但是 node-printer 要排版就得用 pdf 但是还只支持 linux 如果有 c++基础可以自己写打印的 dll node-printer 本身也是调用那作者自己写的 c++文件 然而那时候赶业务也没时间去学 c++ |
34
drquest 2018-10-22 11:32:42 +08:00 1
@Handle 如果是海鸥驱动的话,可以利用 BarTender SDK 进行集成
http://www2.seagullscientific.com/label-software/whitepapers/controlling-barcode-label-software-using-c-sharp-and-vb.net(english).pdf |
35
sobigfish 2018-10-22 11:56:18 +08:00
生成 pdf 再调用 chrome 自己的打印? https://github.com/diegomura/react-pdf
或者菜鸟打印组件? https://www.cainiao.com/markets/cnwww/print |
38
Handle OP |
39
Handle OP @drquest 这个 SDK 浏览了一下,似乎是依赖于机器上预先安装好 BarTender 才可以正常工作…… Excel 却没有这样的依赖
|
40
Handle OP @yyss8 刚才测试了一下,如果直接打印标签的图像(宽 8cm 高 3cm )打印十分完美(使用系统自带的右键菜单中的图片打印入口)
|
44
Handle OP @sunorg 谢谢,参考了这篇文章终于算是实现了一个 std 程序打印一些文本出来了。https://blog.csdn.net/Tobin_Wang/article/details/80585900
|
45
Handle OP @jfcai @sunorg @drquest
谢谢各位前辈悉心指教!已成功解决将位图文件打印出来且方向正确的基本需求 windows API 实现打印图片,图片可以通过 canvas 生成所以不是什么太大的问题 细节中,成功创建打印机 HDC 对象之后,使用下列语句创建一个虚拟的适配的 HDC 对象 ( C++语言) HDC virtualDC = CreateCompatibleDC(hdcprint); 然后通过以下语句来把位图( HBITMAP )拷贝到真实打印机上即可 HBITMAP hOldBitmap = (HBITMAP)SelectObject(virtualDC, img0); BitBlt(hdcprint, 0, 0, 647, 240, virtualDC, 0, 0, SRCCOPY); 最终打印效果和系统内置图像浏览器的打印效果相同 |
46
dsnake1984 2019-01-10 04:19:04 +08:00
知道有个 js lodop 快递鸟网站有破解版的
|