V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xiangbohua
V2EX  ›  分享创造

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

  •  
  •   xiangbohua · 2021-02-07 19:41:55 +08:00 · 3709 次点击
    这是一个创建于 1392 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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-02-07 23:20:48 +08:00
    以前买过 Lodop,后来还是换成网页打印了
    mhycy
        2
    mhycy  
       2021-02-08 01:45:00 +08:00
    对于标签票据打印
    基于某些可视化标签设计软件导出 ZPL 之类的打印指令(提取文本框坐标用于后续渲染)
    并写一个打印指令框架进行渲染,并在此基础上进行程序化设计
    是开发与使用上最简单快捷的( PDF 直接打标签机可能会打歪,或者走纸异常)

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

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

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