最近,客户有个需求过来,Web
端无预览打印,美其名曰:快捷打印。
当时第一反应就是找插件,拿来主义永远不过时。找了一圈发现,免费的有限制,没限制的需要收费(LODOP
真的好用)。说来就是一个简单的无预览打印,收费的诸多功能都无用武之地,总的来说性价比很低,所以就打算自己琢磨着写一个算了。刚开始总是纠结在Web
端去实现直接打印,打印是实现了,结果是服务端的,客户端只能一脸懵。
后来(准备妥协了),安装了一些收费的插件发现,都需要先安装一个客户端程序,灵光乍现,解决方案这不就出来了。
思路:Web
端调用客户端程序,让客户端程序去实现打印。
实现:Web
端通过WebSocke
t将Html
发送给客户端,客户端(Winform
)监听消息,接收处理后再打印。
客户端(Winform
)打印实现方式:
1、Html
转PDF
,然后打印PDF
(暂时需要用到三方包)
2、Html
转图片,然后通过PrintDocument
打印图片
3、通过WebBrowser
实现打印
按照上面的思路再去写代码,就会简单很多。
Web端的代码就不多说了,一个简单的WebSocket
通信。
客户端程序(Winform
)
1、监听Web端的WebSocket
消息,这里有用到三方包:Fleck,开箱即用,非常方便。
1 | csharp复制代码 1 /// <summary> |
2、处理Html
,将Html
转换为图片:
1 | csharp复制代码 1 /// <summary> |
3、打印图片
1 | ini复制代码 1 /// <summary> |
以上就是 Html
转图片,然后通过PrintDocument
打印图片 的实现代码了。其它两种方式大家有兴趣可以去试试。
WebBrowser
比较简单,但是对打印机控制不是特别友好(也可能是我没有发现,研究不深)
1 | scss复制代码1 WebBrowser wb = new WebBrowser(); |
Html
转PDF
,然后打印PDF
原理于Html
转图片,然后通过PrintDocument
打印图片一样,不同的是转PDF
可能需要用到第三方的包,目前这方便的包还是比较齐全的,NUGET
搜索pdf
几乎全是。
需求总是来得特别突然,下次再有新特别需求时再来和大家分享。
以上就是这篇文章的全部内容了,有帮助的点个赞,有错误的欢迎大家指出来,有更好的解决方案也希望大家不吝赐教。
本文转载自: 掘金