团队目前接到一个需求:需要开发一个虚拟打印机软件,让用户安装在 windows 电脑上。作用是:当用户打印时,可以选择我们的虚拟打印机,弹出页面让用户填写一些信息,再发送 http 请求,将填写的信息以及要打印的内容(以 pdf 形式)提交到我们的后台服务器上。
查找了一些开源项目,主要是基于 donet 进行开发,苦于团队内没有熟悉客户端的选手,正在考虑是走外包开发还是内部安排感兴趣的同学边学边做。
有没有搞过类似功能的朋友?想听听你们的建议
1
wangkun025 2022-08-11 14:47:13 +08:00
好 sao 的操作
|
2
joooooker21 OP @wangkun025 B 端客户,这样的需求还挺普遍的
|
3
LeegoYih 2022-08-11 14:55:12 +08:00
换一个思路不知道可不可行,提供一个 Web 页面,客户提交信息到服务端,然后服务端渲染 PDF 然后再打印,这样就不需要开发客户端了
|
4
wangkun025 2022-08-11 15:04:35 +08:00
有点 dopdf 的感觉,但难度比那个还大点。
|
5
joooooker21 OP @LeegoYih 用虚拟打印机主要是为解决这样一个问题:用户在其它业务系统中进行操作时,能通过点击打印就把数据推送到我们服务端,并且其它业务系统不需要进行改造(客户也找不到人来改造)
Web 页面在这样的场景下可能并不合适 |
6
makelove 2022-08-11 15:09:14 +08:00
我记得似乎 windows 内置有打印到 pdf 文件的功能吧?
直接让用户打印 pdf 到一个目录,然后写个程序监控这个目录一有新文件就传送。 |
7
joooooker21 OP @makelove 也是一个思路,不过用户还需要填写一些信息关联到 pdf 文件,并且也要一并传给服务端
|
8
jstony 2022-08-11 15:21:15 +08:00
楼主看起来应该是需要找个熟悉虚拟打印机驱动开发的,如果不介意外购 sdk 的话,我记得也有一些已经封装好的 virtual printer sdk 可以用来被 c#调用,不妨可以参考一下,毕竟为了这个特性单独养一个驱动开发的人可能性价比不是特别高,而且一般价格还不太低。
|
9
makelove 2022-08-11 15:28:48 +08:00
@joooooker21 那就这个监控程序发现新 pdf 后,直接后台弹出前台界面,显示这个 pdf 预览并要用户输入相关信息
|
10
dem0ns 2022-08-11 15:33:09 +08:00
用 ipp 协议,服务器用 cups 改造,用户打印就正常就正常通过 ipp 传输到服务器,客户端开发个 agent ,有打印任务就弹出个页面让用户填写信息,只有提交信息了服务器端才执行打印操作。
|
11
a33291 2022-08-11 15:47:30 +08:00
这种需求的确可以通过虚拟打印机实现,但是如果要自己开发就涉及驱动开发.有现成的第三方开发的虚拟打印机 sdk,建议直接购买这种 sdk 进行二次开发.
虚拟打印机模拟成设备后,可以在用户选择到对应打印机并打印的时候弹出 ui(接管控制逻辑)和用户交互,比如一些虚拟 pdf 打印机就是你点打印的时候弹出一个对话框让你填写文件名,还有可以选择纸张等(比如 Adobe Acrobat DC). 楼上建议的监控 pdf 目录等方式已经滞后了,而虚拟打印机则可以在用户打印的时候就接管控制. |
12
a33291 2022-08-11 15:51:40 +08:00
还有一种方案不确定是否可行,就是 hook 全局打印消息,拦截到打印消息时进行自己的业务处理,这不需要驱动开发.
|
13
joooooker21 OP @jstony
没错,目前正在评估技术难度,如果太过复杂就不安排其它同学研究了,毕竟产出比不大。内部同学开发的好处是沟通成本比较低,后续维护也比较稳定。 如果能基于其它成熟的 sdk 进行二次开发,并且开发周期可控的话,也是可以接受的。 |
14
joooooker21 OP @makelove 如果只是临时用用,这的确是一个既简单又能实现需求的方案
|
15
joooooker21 OP |
16
zjsxwc 2022-08-11 16:04:53 +08:00
不如 linux cups 改一下,然后 cups 提供网络打印机添加到 windows 上,都不需要 windows 驱动。
|
17
zjsxwc 2022-08-11 16:12:56 +08:00
|
18
joooooker21 OP @zjsxwc 多谢,看起来还是一个客户端的 agent ,如楼上 #10 所描述的
|
19
joooooker21 OP @joooooker21 #18 还是 -> 还需要
|
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) 当用户在其他软件打印时,会触发这个脚本执行,这样就把控制权传递到你的程序了 |
22
joooooker21 OP @a33291 https://github.com/clawsoftware/clawPDF 这个看起来很棒,已经尝试使用了,与我们想要的功能一致。非常感谢
|