# 辦公打印共享打印機軟件
#### 介紹
簡單的在線打印[局域網、廣域網免驅動共享打印機方案]
## 使用方法
I. 下載本項目
在打印機連接的電腦下載本項目,關閉360等殺毒軟件,打開并安裝,安裝好后打開桌面上`共享打印系統`(如果提示"訪問拒絕",請使用管理員權限打開)
其他原因打不開,可能是沒有安裝.NET組件,下載地址: https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/thank-you/net48-offline-installer
Ⅱ、原理介紹
### 遠程打印原理:
原理如下圖

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\網頁打印原理
原理是通過在電腦上安裝一個客戶端,然后通過瀏覽器與之通信實現本地靜默打印。

客戶端相當于一個本地server,本機瀏覽器通過ajax訪問本地server,發送文件地址以及者打印相關信息給這個本地server,本地server再通過文件地址下載需要打印文件,再發送給打印機實現打印。本地server由于是本地客戶端,權限高,能夠調用操作系統豐富的API,從而實現瀏覽器實現不了的一些功能,比如打印PDF文件,打印訂單收銀小票等
Ⅲ、演示
客戶可下載此客戶端到電腦安裝,電腦連接好打印機
并設置為默認打印機
替換鏈接中的文件地址,打開此鏈接 ,`https://console.ushengyun.com/account/push?id=1639643778000&msg={"url":"your url"}`
打印機會完成打印