V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joooooker21
V2EX  ›  C#

虚拟打印机开发的复杂度问题

  •  
  •   joooooker21 · 2022-08-11 14:42:36 +08:00 · 2699 次点击
    这是一个创建于 840 天前的主题,其中的信息可能已经有所发展或是发生改变。

    团队目前接到一个需求:需要开发一个虚拟打印机软件,让用户安装在 windows 电脑上。作用是:当用户打印时,可以选择我们的虚拟打印机,弹出页面让用户填写一些信息,再发送 http 请求,将填写的信息以及要打印的内容(以 pdf 形式)提交到我们的后台服务器上。

    查找了一些开源项目,主要是基于 donet 进行开发,苦于团队内没有熟悉客户端的选手,正在考虑是走外包开发还是内部安排感兴趣的同学边学边做。

    有没有搞过类似功能的朋友?想听听你们的建议

    第 1 条附言  ·  2022-08-11 16:02:04 +08:00
    基本需求和功能已经在评论中有大致的描述了,再请问一下大家,外包价格多少合适?工期一个月


    有大佬感兴趣的话也欢迎毛遂自荐
    第 2 条附言  ·  2022-08-11 17:30:17 +08:00
    感谢 #21 提供的信息

    我们将基于 https://github.com/clawsoftware/clawPDF 实现我们想要的功能

    谢谢各位朋友的建议,这对我们很有帮助
    22 条回复    2022-08-11 17:21:07 +08:00
    wangkun025
        1
    wangkun025  
       2022-08-11 14:47:13 +08:00
    好 sao 的操作
    joooooker21
        2
    joooooker21  
    OP
       2022-08-11 14:54:20 +08:00
    @wangkun025 B 端客户,这样的需求还挺普遍的
    LeegoYih
        3
    LeegoYih  
       2022-08-11 14:55:12 +08:00
    换一个思路不知道可不可行,提供一个 Web 页面,客户提交信息到服务端,然后服务端渲染 PDF 然后再打印,这样就不需要开发客户端了
    wangkun025
        4
    wangkun025  
       2022-08-11 15:04:35 +08:00
    有点 dopdf 的感觉,但难度比那个还大点。
    joooooker21
        5
    joooooker21  
    OP
       2022-08-11 15:06:06 +08:00
    @LeegoYih 用虚拟打印机主要是为解决这样一个问题:用户在其它业务系统中进行操作时,能通过点击打印就把数据推送到我们服务端,并且其它业务系统不需要进行改造(客户也找不到人来改造)

    Web 页面在这样的场景下可能并不合适
    makelove
        6
    makelove  
       2022-08-11 15:09:14 +08:00
    我记得似乎 windows 内置有打印到 pdf 文件的功能吧?
    直接让用户打印 pdf 到一个目录,然后写个程序监控这个目录一有新文件就传送。
    joooooker21
        7
    joooooker21  
    OP
       2022-08-11 15:11:42 +08:00
    @makelove 也是一个思路,不过用户还需要填写一些信息关联到 pdf 文件,并且也要一并传给服务端
    jstony
        8
    jstony  
       2022-08-11 15:21:15 +08:00
    楼主看起来应该是需要找个熟悉虚拟打印机驱动开发的,如果不介意外购 sdk 的话,我记得也有一些已经封装好的 virtual printer sdk 可以用来被 c#调用,不妨可以参考一下,毕竟为了这个特性单独养一个驱动开发的人可能性价比不是特别高,而且一般价格还不太低。
    makelove
        9
    makelove  
       2022-08-11 15:28:48 +08:00
    @joooooker21 那就这个监控程序发现新 pdf 后,直接后台弹出前台界面,显示这个 pdf 预览并要用户输入相关信息
    dem0ns
        10
    dem0ns  
       2022-08-11 15:33:09 +08:00
    用 ipp 协议,服务器用 cups 改造,用户打印就正常就正常通过 ipp 传输到服务器,客户端开发个 agent ,有打印任务就弹出个页面让用户填写信息,只有提交信息了服务器端才执行打印操作。
    a33291
        11
    a33291  
       2022-08-11 15:47:30 +08:00
    这种需求的确可以通过虚拟打印机实现,但是如果要自己开发就涉及驱动开发.有现成的第三方开发的虚拟打印机 sdk,建议直接购买这种 sdk 进行二次开发.

    虚拟打印机模拟成设备后,可以在用户选择到对应打印机并打印的时候弹出 ui(接管控制逻辑)和用户交互,比如一些虚拟 pdf 打印机就是你点打印的时候弹出一个对话框让你填写文件名,还有可以选择纸张等(比如 Adobe Acrobat DC).

    楼上建议的监控 pdf 目录等方式已经滞后了,而虚拟打印机则可以在用户打印的时候就接管控制.
    a33291
        12
    a33291  
       2022-08-11 15:51:40 +08:00
    还有一种方案不确定是否可行,就是 hook 全局打印消息,拦截到打印消息时进行自己的业务处理,这不需要驱动开发.
    joooooker21
        13
    joooooker21  
    OP
       2022-08-11 15:51:45 +08:00
    @jstony

    没错,目前正在评估技术难度,如果太过复杂就不安排其它同学研究了,毕竟产出比不大。内部同学开发的好处是沟通成本比较低,后续维护也比较稳定。

    如果能基于其它成熟的 sdk 进行二次开发,并且开发周期可控的话,也是可以接受的。
    joooooker21
        14
    joooooker21  
    OP
       2022-08-11 15:53:17 +08:00
    @makelove 如果只是临时用用,这的确是一个既简单又能实现需求的方案
    joooooker21
        15
    joooooker21  
    OP
       2022-08-11 15:59:01 +08:00
    @a33291 #11

    没错,要实现的功能就如你描述的一样

    当前是想找一些开源或者是付费的 sdk 进行二次开发,还需要评估技术难度,耗时太久的话就还是准备找外援了
    zjsxwc
        16
    zjsxwc  
       2022-08-11 16:04:53 +08:00
    不如 linux cups 改一下,然后 cups 提供网络打印机添加到 windows 上,都不需要 windows 驱动。
    zjsxwc
        17
    zjsxwc  
       2022-08-11 16:12:56 +08:00
    joooooker21
        18
    joooooker21  
    OP
       2022-08-11 16:19:06 +08:00
    @zjsxwc 多谢,看起来还是一个客户端的 agent ,如楼上 #10 所描述的
    joooooker21
        19
    joooooker21  
    OP
       2022-08-11 16:19:39 +08:00
    @joooooker21 #18 还是 -> 还需要
    jstony
        20
    jstony  
       2022-08-11 16:28:34 +08:00
    @zjsxwc 这个方案只能用通用驱动,做不到 op 需要的在收到打印任务的时候弹出 gui 填写定制信息。
    a33291
        21
    a33291  
       2022-08-11 17:13:09 +08:00   ❤️ 1
    找到 2 个比较符合 op 需求的项目
    1.https://github.com/clawsoftware/clawPDF
    2.https://github.com/stchan/PdfScribe

    其中 1 的话我推荐你尝试一下,因为我认为他默认提供的功能就足以解决你现有的需求.他会自动安装一个虚拟打印机,然后允许你配置用户打印时触发的动作,比如此处我设置了一个脚本(他支持 bat exe 等)
    ![image.png]( https://s2.loli.net/2022/08/11/P2t6yk9J3FsLiQI.png)

    当用户在其他软件打印时,会触发这个脚本执行,这样就把控制权传递到你的程序了
    joooooker21
        22
    joooooker21  
    OP
       2022-08-11 17:21:07 +08:00
    @a33291 https://github.com/clawsoftware/clawPDF 这个看起来很棒,已经尝试使用了,与我们想要的功能一致。非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3187 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 13:19 · PVG 21:19 · LAX 05:19 · JFK 08:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.