# 办公打印共享打印机软件
#### 介绍
简单的在线打印[局域网、广域网免驱动共享打印机方案]
## 使用方法
I. 下载本项目
在打印机连接的电脑下载本项目,关闭360等杀毒软件,打开并安装,安装好后打开桌面上`共享打印系统`(如果提示"访问拒绝",请使用管理员权限打开)
其他原因打不开,可能是没有安装.NET组件,下载地址: https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/thank-you/net48-offline-installer
Ⅱ、原理介绍
### 远程打印原理:
原理如下图
![](https://img.kancloud.cn/59/2a/592ac5a1563ed81efbea44f389392897_587x402.png)
PDF等办公类文件存放于业务服务器,当需要打印时,请求Socket服务器,Socket服务器通过预先建立的TCP连接发送消息给打印机连接的电脑,电脑收到消息后通过Http协议下载文件并处理成打印机数据,发给打印机完成打印。
* 打印文件的URL地址,**必需是公网可访问的地址**。
* Socket服务器实现可参照开源项目:https://www.workerman.net/web-sender
```
# 后端调用api向前端推送打印消息
<?php
// 指明给谁推送,为空表示向所有在线用户推送
$to_uid = "";
// 推送的url地址,使用自己的服务器地址
$push_api_url = "http://xxx.net:2121/";
$post_data = array(
"type" => "publish",
"content" => '{"url":"https://baidu.com/test.pdf"}',
"to" => $to_uid,
);
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array("Expect:"));
$return = curl_exec ( $ch );
curl_close ( $ch );
var_export($return);
```
即时性要求不太高的业务,可使用轮询实现
电脑客户端会在30s请求一次服务器获取打印消息,如没有消息,则服务器返回{"url":""},如有消息,返回{"url":"your pdf url"},客户端收到后则请求文件服务器获取文件
### 浏览器\web\网页打印原理
原理是通过在电脑上安装一个客户端,然后通过浏览器与之通信实现本地静默打印。
![](https://img.kancloud.cn/ef/e7/efe7de5c2265e6d908dc0ca2b28d8aaa_587x402.png)
客户端相当于一个本地server,本机浏览器通过ajax访问本地server,发送文件地址以及者打印相关信息给这个本地server,本地server再通过文件地址下载需要打印文件,再发送给打印机实现打印。本地server由于是本地客户端,权限高,能够调用操作系统丰富的API,从而实现浏览器实现不了的一些功能,比如打印PDF文件,打印订单收银小票等
Ⅲ、演示
客户可下载此客户端到电脑安装,电脑连接好打印机
并设置为默认打印机
替换链接中的文件地址,打开此链接 ,`https://console.ushengyun.com/account/push?id=1639643778000&msg={"url":"your url"}`
打印机会完成打印