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

2022-08-11 14:42:36 +08:00
 joooooker21

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

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

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

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

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

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

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

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

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/872163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX