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

2022 年 8 月 11 日
 joooooker21

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX