虚拟打印机开发的复杂度问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joooooker21
V2EX    C#

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

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

    团队目前接到一个需求:需要开发一个虚拟打印机软件,让用户安装在 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     Solana     3911 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 05:15 PVG 13:15 LAX 21:15 JFK 00:15
    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