基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)。实现方案有很多种,这里主要介绍 2 种,并附详细的实现过程和提供需要的源码下载。


题外话,首先分享一个在线PDF工具箱,功能非常全非常好用:
https://tools.pdf24.org/en/all-tools


一、实现思路简介

要实现标题所写的目标,需要按照下面的步骤来进行:

1、开发虚拟打印机程序

跟普通的打印机驱动一样,安装完后可以在“打印机”里看到本打印机,第三方软件也能通过点“打印”选择该打印机。打印时完成两个处理:一是生成pdf文件,二是把文档送到真实打印机进行打印。

2、开发把打印文件上传到服务器的程序

这个程序是一个服务,要一直运行。程序会实时监测是否有虚拟打印机生成的PDF文件,如果有则立即进行上传到服务器的操作。

二、打印机相关案例介绍

1、利用虚拟打印机把打印内容上传到服务器并输出给物理打印机(一)

A 运行环境:win7/win10

B 打印内容转成文件格式:JPG

C 文件上传通讯协议:https、post

D 物理打印机类型:热敏

E 连接的物理打印机台数:1台

2、利用虚拟打印机把打印内容上传到服务器并输出给物理打印机(二)

A 运行环境:win7/win10

B 打印内容转成文件格式:PDF

C 文件上传通讯协议:https、post

D 物理打印机类型:热敏

E 连接的物理打印机台数:4台(纸的尺寸不同)

3、打印机驱动程序开发

A 运行环境:win7/win10

B 打印机类型:热敏

C 打印数据传递:串口

D 参数设定:调用打印机的SDK来设定

4、利用PJL命令控制打印机参数

A 运行环境:win7/win10

B 打印机类型:喷墨

C 打印数据传递:串口

D 命令实现功能:设定打印机的灰度、单双面、份数等

5、打印内容偏移的矫正

A 运行环境:win7/win10

B 打印机类型:热敏

C 打印数据传递:串口

D 问题描述:打印内容随着打印份数增加偏移增大


方案一:

基于开源项目clawpdf二次开发,实现我们的功能。clawpdf项目开源但并不免费,一般人根本没法直接从github下载后运行,他有各种坑,还有文件签名,我也是花了很久的时间才弄好,在它的基础上做了一些新的业务实现,并命名为KKPrinter,但是大部分代码任然是clawpdf的,在这里说明。

打开项目目录,双击 clawpdf.sln 启动项目,如图所示:

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第1张图片

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第2张图片
基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第3张图片

打开一个文档,按 Ctrl + P 调出打印机列表,如下图:

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第4张图片

上面的打印机驱动 数量 和 名称,可以在代码里面进行控制,这里为了尊重开源项目,我就用了原来的名称。

有两种方式把拦截到的打印机文件转发到物理打印机所在电脑:
1)HTTP请求;
2)Ftp请求;
基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第5张图片

在物理打印机监听到文件后,直接使用共享的打印机或者默认的打印机对文件进行打印,这里主要用到一个核心库:PdfPrintingNet.dll 。这样就可以实现在物理打印机电脑自动打印文件,不需要人为干预。

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第6张图片
自动打印D盘目录下的文件,通过下面简单demo可以进行测试:

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第7张图片
上面两个程序,一个放在 物理打印机所在的电脑,一个 放在需要使用远程打印机的电脑,中间用一个公网服务器通过 http 或者 ftp 把他们的文件进行传输,即可实现我们的目标。

完整源码下载地址:
点击下载


方案二:

基于修改系统注册表中的打印机属性参数实现,其原理都是差不多,都是通过虚拟打印机拦截用户的打印机文件,转发到物理打印机进行打印。这种方案也测试过,就是不能完全保留打印时候的全部属性参数,比如只能保留部分参数 比如 页码等等。

打开项目目录,双击 clawpdf.sln 启动项目,如图所示:

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第8张图片
基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第9张图片
运行后,选择一个需要进行共享的打印机,这里通过 磁盘文件共享的方式代替 HTTP 和 ftp 访问文件传输,而且 把 共享端 和 使用端放在了一起,只需 选中一个文档,Ctrl + P 打印对话框,选择虚拟打印机,文件会自动用 物理打印机打印出来,实现了我们的目标。
基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第10张图片
点击本地打印机测试,即共享本地了打印机,可以根据需要进行更改业务逻辑实现自动化。

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第11张图片

添加虚拟打印机到本地:

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第12张图片
文档打印对话框中,选择 安装的虚拟打印机:

基于开源项目二次开发KKPrinter实现打印机共享,远程跨网络实现不同网络打印机共享,客户端利用虚拟打印机截取打印文件转发至物理打印机(附源码)_第13张图片
经过测试,可以完成我们的目标。

完整源码下载地址:
点击下载


以上是市面上使用的技术方案,比如 森雀云 等等。


我们团队有更高级的实现方案,有需要可以私聊。

你可能感兴趣的:(智能工具,共享打印机,虚拟打印机,云打印,远程打印,网络打印机,打印机)