请问,用 Electron 打印标签有什么推荐库之类的么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Handle
V2EX    Node.js

请问,用 Electron 打印标签有什么推荐库之类的么

  •  
  •   Handle 2018-10-22 04:40:22 +08:00 via Android 10238 次点击
    这是一个创建于 2547 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在已经浪费了 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 这里有没有开发过标签打印软件的老司机指条明路,怎样才能让标签 正常 打印出来…… 先感谢一波……毕业设计要严重超时了……

    题外话提一句:怎么治宿舍里疯狂抽烟打游戏大吼大叫的室友……

    46 条回复    2019-01-10 04:19:04 +08:00
    zhenjiachen
        1
    zhenjiachen  
       2018-10-22 05:10:09 +08:00 via iPhone
    我搞过 tsc 打印机打印二维码打印,打印图片怎么都会出现问题,但是用 tsc 提供的工具就不会,因为这种打印机只能用代码发送命令,而不支持直接打印图片
    CEBBCAT
        2
    CEBBCAT  
       2018-10-22 05:31:40 +08:00 via Android
    没看懂
    egen
        3
    egen  
       2018-10-22 05:43:50 +08:00   1
    小票打印机我用的 escpos,图片也可以打印
    标签打印机不确定是否通用,可以试试
    ca1123
        4
    ca1123  
       2018-10-22 05:54:29 +08:00   1
    官方没有 SDK 么?这玩意什么原理?和普通打印机一样么?
    Handle
        5
    Handle  
    OP
       2018-10-22 05:57:30 +08:00
    @zhenjiachen 请问是 TSC 官方提供了 api 么?

    @CEBBCAT 需求是打印一些标签,标签中含有条码

    @egen escpos 么?感谢,我会去找找试试的

    @ca1123 按照得力官网来看,目前是没提供 sdk 之类的,只提供了一些专业标签条码打印软件……系统识别确实是普通连供纸打印机
    ca1123
        6
    ca1123  
       2018-10-22 05:57:46 +08:00
    @egen 我突然有一点点想建议楼主用喵喵机。。。
    Handle
        7
    Handle  
    OP
       2018-10-22 06:11:36 +08:00
    @ca1123 有特殊需求导致不能用热敏来着……

    @egen 想请问一下…… escpos 是否需要管理员权限来加载 DLL,我刚才尝试一直提示 dll 加载失败…… node-gyp 应该也是正确运行过了
    Handle
        8
    Handle  
    OP
       2018-10-22 06:43:07 +08:00
    @egen 特别刺激,似乎是 USB 驱动不兼容 node-usb 库,然后替换成兼容库之后打印机就完全不识别了……
    kokomo
        9
    kokomo  
       2018-10-22 06:44:40 +08:00 via Android
    标签字,我只推荐 Brother
    Handle
        10
    Handle  
    OP
       2018-10-22 06:52:07 +08:00
    @kokomo 最后希望实现的需求是希望能够适配不同打印机,在 Electron 中配置尺寸和信息后直接开打……所以机器型号啥的…… Brother 就嫌不奢求了吧
    jfcai
        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();打印。
    OpenJerry
        13
    OpenJerry  
       2018-10-22 07:40:26 +08:00 via Android   1
    回答最后一个问题:加入一个社团,然后一天到晚都在实验室混就行了,我就是这样,该睡觉了才回宿舍
    zxq2233
        14
    zxq2233  
       2018-10-22 07:46:07 +08:00
    zxq2233
        15
    zxq2233  
       2018-10-22 07:47:38 +08:00 via Android
    你愿意学
    Handle
        16
    Handle  
    OP
       2018-10-22 07:48:39 +08:00
    @zxq2233 谢谢!测试了一下……一样出现了打印长度短于纸张宽度时,打印区域会自动旋转的问题……
    Handle
        17
    Handle  
    OP
       2018-10-22 07:54:45 +08:00
    @OpenJerry 很感谢,不过实际情况挺尴尬的……我今天通宵了……旁边那哥们也通宵打游戏喊了一晚上……
    Handle
        18
    Handle  
    OP
       2018-10-22 08:28:22 +08:00
    @zxq2233 刚才测试了一下,很感谢!虽然这个里面似乎对于 mm 的支持很差……但是至少终于可以在偏移不算离谱的情况下生成和打印少量标签了。不过这个和其他软件(例如 Word )具有相同问题,打印长度必须大于宽度……不知道怎样才能解决掉……
    yyss8
        19
    yyss8  
       2018-10-22 08:42:15 +08:00
    用 Html 排版个静态文件 然后用 chrome 打开看看能打印吗
    electron 自带的如果 Html 能打出来就能打出来 不然可能就要借用点第三方库了
    Handle
        20
    Handle  
    OP
       2018-10-22 08:50:20 +08:00 via Android
    @yyss8 都能打印,但就是和前文描述的一致,一旦页面高度小于宽度,整个页面打印的横向竖向就会翻转
    刚才在 word 又试了一会,发现 word 里面在页面高度小于宽度时会自作主张地把横竖向翻转,这样就导致了标签打印方向错误。猜测别的程序也有类似螺丝
    Handle
        21
    Handle  
    OP
       2018-10-22 08:50:47 +08:00 via Android
    @yyss8 抱歉,最后手滑了,猜测别的程序也有相似 逻辑
    sunorg
        22
    sunorg  
       2018-10-22 08:51:34 +08:00 via Android
    刚开发一个打印软件。用 pyqt 做成独立程序,可以打印图片,pdf,或者 html(不带图)。执行完美
    yyss8
        23
    yyss8  
       2018-10-22 08:54:00 +08:00
    @Handle 最好还是确认一下 不清楚 word 会不会加了自动排版
    drquest
        24
    drquest  
       2018-10-22 09:00:36 +08:00
    类似的事情我们做过,基本上不建议你在 Chrome 引擎里搞这些事情,因为 Web 标准打印相关的实现本来就很弱,加上浏览器引擎会自带一些 border 设置,基本上都会乱套,你可以考虑 html2canvas 之类的把要打印的内容先转位图再送进标签打印机,这样至少可以保证内文不乱。或者干脆写个 Windows service,大多数的打印机提供.Net 和 Java 的 SDK,开发起来方便很多。

    标签打印 SDK 最完善的是 zebra,我不建议你用没有 SDK 的型号自己 hack,从项目的角度讲增加很多成本和风险,比较得不偿失。
    09apple
        25
    09apple  
       2018-10-22 09:11:44 +08:00
    旋转 90 度...是不是打印方向跟你预期的不一样- -
    Handle
        26
    Handle  
    OP
       2018-10-22 09:15:13 +08:00
    @sunorg 请问方便详细说说么?

    @yyss8 Word,如果在页面高度高于宽度,页面设置为纵向,印刷一切正常
    如果高度小于宽度,无论横纵印刷均为旋转 90 度

    @drquest 谢谢!确实一开始就是打算把要打印的内容转为图像再打印出来,于是才先在 Word 一类的软件中尝试正常打印一场宽度 8cm 高度 3cm 左右的内容。关于机器的选用,理由很简单……穷学生只是想尽量省钱来入手一台热转印机……一开始没有考虑太多,错误地估计了这部分的难度……现在可能确实需要想办法 hack ……
    而且还有一点就是……明明都有专门的软件适配多种不同型号……其中应该也不会使用太多不同机种 api,我也很好奇这些软件地实现
    Handle
        27
    Handle  
    OP
       2018-10-22 09:15:48 +08:00
    @09apple 当高度小于宽度的时候,无论怎么设置,打印出来的方向都不太对……
    rockyou12
        28
    rockyou12  
       2018-10-22 09:21:24 +08:00
    @drquest lz 这个需求用 electron 没问题的,electron 的主进程是 node 运行时,调 dll 什么的完全没问题。我司现在在做个 pos 打印相关的项目,也是 electron 没什么坑。lz 其实能找到其他语言的库写了然后用 node 调就行了
    drquest
        29
    drquest  
       2018-10-22 09:29:14 +08:00
    @Handle 得力的这个机器很可能是贴牌的,你从驱动里找一下字符串或者从 device_id 或者拆开看一下主板找一下它是哪一家 OEM 的,基本上上游厂家都会给 SDK,国内很多小厂牌收据打印机都是贴牌芯烨 Xprinter 的,你可以找找看。
    egen
        30
    egen  
       2018-10-22 09:30:23 +08:00
    @Handle #8
    这个库编译比较麻烦,如果中途出错,最好清掉重新来一遍
    权限不记得了,当时是在 win7 上编译和使用的,默认就是 administrator 权限
    理论上只要普通的 usb 驱动可以识别到打印机就可以,因为走的是 ESC/POS 协议,应该符合标准的打印机都可以使用的
    Handle
        31
    Handle  
    OP
       2018-10-22 09:45:29 +08:00
    @rockyou12 谢谢!现在还在找库,笑


    @yyss8 刚才给得力打了个电话,对方表示 Word 无法正常打印,但是 Excel 可以。我实际测试了一下,确实 Excel 可以正常打印。此外对方明确表示短期不会提供二次开发相关 sdk 之类工具,无奈。

    @drquest 谢谢,vid 0x20d1, pid 0x7008,海鸥的驱动程序……
    找到了! Inf 部分显示为 TSC,我或许可以从这里切入试试

    @egen 之后尝试了多次,发现不是权限问题,是 USB 库不支持这台打印机,笑
    Handle
        32
    Handle  
    OP
       2018-10-22 10:13:16 +08:00
    @drquest 此外,excel 可以正常地打印和布局……如果可以实现 excel 的打印效果也就不需要限定打印机型号就能打印了……我个人更希望能这样,笑
    yyss8
        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++
    drquest
        34
    drquest  
       2018-10-22 11:32:42 +08:00   1
    run2
        35
    run2  
       2018-10-22 11:56:18 +08:00
    生成 pdf 再调用 chrome 自己的打印? https://github.com/diegomura/react-pdf
    或者菜鸟打印组件? https://www.cainiao.com/markets/cnwww/print
    run2
        36
    run2  
       2018-10-22 12:17:05 +08:00
    @sobigfish #35 ,这个不是之前那个自己控制内容的 API 级别的了-,- 我再找找
    sunorg
        37
    sunorg  
       2018-10-22 16:33:58 +08:00 via Android
    @Handle 我走的是 qt 路线
    Handle
        38
    Handle  
    OP
       2018-10-22 18:07:50 +08:00
    @yyss8 现在就是发现 html 和 word 有相似逻辑,页面宽高会自作主张


    @drquest 谢谢!如果这个软件提供 sdk 的话开发一定能简单很多


    @sobigfish 这两个都是有个问题……页面高度都大于宽度,在 chrome 上打印正常。但这里需求是打印一些标签,宽度远大于高度的

    @sunorg 这样啊…… C 系语言果然还是在解决这种相对基础的问题上更容易一些啊
    Handle
        39
    Handle  
    OP
       2018-10-22 18:10:39 +08:00
    @drquest 这个 SDK 浏览了一下,似乎是依赖于机器上预先安装好 BarTender 才可以正常工作…… Excel 却没有这样的依赖
    Handle
        40
    Handle  
    OP
       2018-10-22 19:01:08 +08:00
    @yyss8 刚才测试了一下,如果直接打印标签的图像(宽 8cm 高 3cm )打印十分完美(使用系统自带的右键菜单中的图片打印入口)
    sunorg
        41
    sunorg  
       2018-10-22 20:06:08 +08:00 via Android
    @Handle 我的需求是无弹出对话框,直接出标签。目前完美实现
    Handle
        42
    Handle  
    OP
       2018-10-22 22:20:23 +08:00
    @sunorg 请问是走的 windows API 么?
    sunorg
        43
    sunorg  
       2018-10-22 22:53:05 +08:00
    @Handle

    Qprinter 组件,底层实现是 qt 已封装好。
    Handle
        44
    Handle  
    OP
       2018-10-23 03:47:47 +08:00
    @sunorg 谢谢,参考了这篇文章终于算是实现了一个 std 程序打印一些文本出来了。https://blog.csdn.net/Tobin_Wang/article/details/80585900
    Handle
        45
    Handle  
    OP
       2018-10-23 04:59:12 +08:00
    @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);

    最终打印效果和系统内置图像浏览器的打印效果相同
    dsnake1984
        46
    dsnake1984  
       2019-01-10 04:19:04 +08:00
    知道有个 js lodop 快递鸟网站有破解版的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2736 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:45 PVG 22:45 LAX 07:45 JFK 10:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86