工作之余弄了 Web 打印解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xiangbohua
V2EX    分享创造

工作之余弄了 Web 打印解决方案

  •  
  •   xiangbohua 2021 年 2 月 7 日 4463 次点击
    这是一个创建于 1854 天前的主题,其中的信息可能已经有所发展或是发生改变。

    工作之余写了个小玩意,目前仅满足需求,还不能定制化扩展。 发出来大家提提意见啦

    Web 打印解决方案

    当前 WEB 应用开发非常流行,主要原因是 WEB 应用客户端的规则很简单,容易学习,容易维护,容易发布,降低了开发难度。但是,WEB 应用的打印一直以来却是一个难题,特别是在应用中完成标签打印(如包裹面单、货运标签等)、票据打印(如零售小票)难度较大,其难度在于如何将需要打印的内容,精确套打到标签、票据中,精确控制分页,并实现高速连续打印,可以说需求还是很多的。

    目前打印主要有下面几种方案:

    • 直接使用浏览器的打印功能
    • 使用 print css
    • 使用 PDF 文件
    • 采用 ActiveX
    • 打印精灵(市面上已经存在的)

    各有各的优缺点吧。

    我这边采用的方案结合了 PDF 和打印精灵相结合的方案(纯属偶然,后面才发现的),用 C#写的目前只能在 Win 下面跑。目前,这(you)个(bu)东(shi)西(bu)还(neng)很(yong)菜。

    使用步骤:

    • 设计模版
    • 从自己的接口获取到自己需要打印的数据并组装
    • 启动 Win 程序
    • js Post 数据到指定的本机端口

    软硬件支持:

    • PDF 阅读软件(要求能够识别打印命令的,Adobe 官方的支持)
    • 打印机驱动

    实现过程:

    • 使用某模版设计工具设计模版
    • 在 Win 程序内部内建一个基础班 HTTP server 用于接收数据
    • 当有数据 POST 到 Win 程序之后,使用读取到的数据生成 PDF 文件到临时文件夹
    • 使用 Process 调用 PDF 阅读软件打印指令将打印机数据发送到打印
    • 完成打印

    当前这个程序在我司用了几年了。 由于使用 PDF 作为数据源,所以支持的打印机很多,基本没有限制。

    缺点:

    • 模版文件需要在 VS 上面设计,目前还没找到什么办法可以自行设计(原因是用的报表不是开源的,虽然是好多年前的版本了,要是有问题自行了断)。
    • 目前对于顺序打印的支持不是很好(有的打印要求串行,例如连一块的那种三联单)

    后面考虑没事再完善一下,目前考虑这几个地方:

    • 客户自定义模版的设计
    • 把文档完善一下
    • 把顺序打印完善完善
    • 看看能不能跨平台

    后面再看看,顺便说一句真有需要的朋友我可以免费帮忙设计模版,直接 run 起来==

    下面是 GIT 地址 https://github.com/xiangbohua/PrintServer2

    12 条回复    2024-08-19 09:42:52 +08:00
    zzk1989
        1
    zzk1989  
       2021 年 2 月 7 日
    以前买过 Lodop,后来还是换成网页打印了
    mhycy
        2
    mhycy  
       2021 年 2 月 8 日
    对于标签票据打印
    基于某些可视化标签设计软件导出 ZPL 之类的打印指令(提取文本框坐标用于后续渲染)
    并写一个打印指令框架进行渲染,并在此基础上进行程序化设计
    是开发与使用上最简单快捷的( PDF 直接打标签机可能会打歪,或者走纸异常)

    数据直接发送文本到打印机打印

    Word 之类的文档,可考虑 Office API 做渲染服务器输出 PDF
    (虽然超级重,而且很容易因为各种原因挂掉,例如弹窗)
    SenLief
        3
    SenLief  
       2021 年 2 月 8 日
    公司还用 clodop
    coosir
        4
    coosir  
       2021 年 2 月 8 日
    希望可以通过网页自由设计模板,跨 Windows, macOS, Linux 的解决方案,最好也能支持移动端打印。
    哦,太贪心了……
    xmml
        5
    xmml  
       2021 年 2 月 8 日
    我做过的项目用 Freemarker 生成好 word 模版,然后把数据填充进去进行服务端渲染,再下载 word 文件到电脑进行打印。Freemarker 是 Java 的,自带跨平台。
    kangyan
        6
    kangyan  
       2021 年 2 月 8 日
    公司用的 clodop 和自研 c#插件...window 下跑完全没问题.
    唯一痛点就是公司电脑都是 mac, 自己一般也用 macbook,为了开发打印公司还要特地背一个 window 笔记本上班...就很累.
    要是能支持 mac 打印就好了
    xiangbohua
        7
    xiangbohua  
    OP
       2021 年 2 月 19 日
    @kangyan 我都是装虚拟机。
    @xmml 感觉 word 还是有点重,适合数据量比较大的少量任务,数据量比较少的打印次数多的不知道速度如何

    @coosir 目前来看只能使用钞能力了。
    @mhycy 标签打印用 ZPL 打印确实比较灵活,而且有标准的指令协议,但是目前还不知道有没有什么比较好的模板编辑器
    @zzk1989 LODOP 是商业版的么
    mhycy
        8
    mhycy  
       2021 年 2 月 19 日
    @xiangbohua
    ZPL 写模板用他们官方的 ZebraDesinger for developers 就好了
    导出 ZPL 文本后自行替换掉图片数据段,写个渲染器把文本渲染成对应的图片就好
    xiangbohua
        9
    xiangbohua  
    OP
       2021 年 2 月 20 日
    @mhycy 在研究研究
    jikoya
        10
    jikoya  
       2023 年 10 月 9 日
    web 端怎么调打印方法呢
    lipengxs
        11
    lipengxs  
       2024 年 8 月 18 日   1
    https://zplpreview.com ,也可以试试这个网站,功能更强的,包含 zpl 预览、以及下载为图片、pdf ,同时还支持 pdf 、图片、html 转 zpl
    xiangbohua
        12
    xiangbohua  
    OP
       2024 年 8 月 19 日
    @jikoya 就发送一个 POST 请求就可以了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2272 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 00:24 PVG 08:24 LAX 16:24 JFK 19:24
    Do have faith in what you're doing.
    ubao msn 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