摘要:最近做一個(gè)web打印插件。瀏覽器訪問web系統(tǒng),點(diǎn)擊打印按鈕后彈出打印預(yù)覽界面,可以保存(pdf,HTML,doc,xls等)或者打印成紙質(zhì)文件。
一、設(shè)計(jì)
用java報(bào)表工具設(shè)計(jì)C/S客戶端,客戶從web系統(tǒng)下載到本地安裝??蛻粼跒g覽器點(diǎn)擊打印按鈕,瀏覽器自定義協(xié)議啟動本地打印程序。本地打印程序獲取打印數(shù)據(jù),然后進(jìn)行打印。
業(yè)務(wù)難點(diǎn)
1. 瀏覽器如何啟動本地打印程序?
2. 本地打印程序如何請求打印數(shù)據(jù)?
接下來上面兩個(gè)問題一一解答。
二、瀏覽器如何啟動本地打印程序
URL Protocol,沒錯就是標(biāo)題里所說的自定義協(xié)議。這玩意兒大家最常見的比如迅雷、電驢等。我們平時(shí)在電影天堂下載電影的時(shí)候點(diǎn)擊鏈接瀏覽器會啟動本地迅雷進(jìn)行下載。
下面是某部電影的下載鏈接瀏覽器檢查元素后
<a href="thunder://QUFmdHA6Ly95Z2R5ODp5Z2R5OEB5ZzQ1Lm..."/>
這里的"thunder"就是url protocol。這個(gè)協(xié)議需要注冊到本地電腦注冊表,具體請看這個(gè)鏈接,博主寫的非常詳細(xì)。Url Protocol自定義協(xié)議實(shí)現(xiàn)調(diào)用本地程序
我這里把這個(gè)過程封裝成 bat 批處理命令,雙擊后自動寫入到注冊表。這里自定義協(xié)議名稱為 myprotocol。
首先看看我的打印插件目錄
PrintPlugin
|—注冊.bat
|—打印程序.exe
注冊.bat
@echo off
echo =====================注冊打印控件===================
echo 注冊打印控件到注冊表,360等殺毒軟件誤報(bào)請“允許運(yùn)行”
echo ====================================================
echo 請按任意鍵開始注冊
pause>nul
set v=%~dp0
echo Windows Registry Editor Version 5.00 >regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol] >>regist.reg
echo "URL Protocol"="%v:\=\\%打印程序.exe" >>regist.reg
echo @="myprotocol" >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\DefaultIcon] >>regist.reg
echo @="%v:\=\\%打印程序.exe,1" >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\shell] >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\shell\open] >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\shell\open\command] >>regist.reg
echo @="\"%v:\=\\%打印程序.exe\" \"%%1\"" >>regist.reg
regedit /s %v%regist.reg
del /q regist.reg
echo 打印控件注冊成功,按任意鍵退出
pause>nul
bat 語法很簡單,雙擊運(yùn)行命令生成regist.reg臨時(shí)文件,并且運(yùn)行regist.reg,然后靜默刪除regist.reg文件。
打印程序.exe是我制作的打印客戶端啟動入口。
在瀏覽器里我們可以這樣調(diào)用我們的打印程序
<a href="myprotocol://key" >點(diǎn)擊打印</a>
三、 本地打印程序如何請求打印數(shù)據(jù)?
請求過程:點(diǎn)擊打印→服務(wù)端生成打印數(shù)據(jù)和key,然后把key返回到瀏覽器→執(zhí)行myprotocol→本地打印程序通過key從服務(wù)端獲取打印數(shù)據(jù)
實(shí)際過程中我們完全可以把key換成鏈接,如此我們的打印客戶端通用性會更強(qiáng)。這樣客戶端直接以這個(gè)鏈接去獲取打印數(shù)據(jù)。不用關(guān)心如何取數(shù)據(jù),它只是用自己拿到的鏈接請求打印數(shù)據(jù)。比如
<a href="myprotocol://http://數(shù)據(jù)請求鏈接" >點(diǎn)擊打印</a>
**java程序如何獲取windows傳入的參數(shù)?**
這是java基礎(chǔ),我們都知道m(xù)ain函數(shù)是java程序啟動的入口。
public static void main(String[] args) {
Systemo.out.println(args[0]); //這就是我們傳入的key
}