1、業務場景
一般的業務場景裏,只需要將pdf文件下載到本地,然後打開直接打印就可以了。
但是,有的場景會考慮到pdf文件的敏感性,需要pdf文件不能被下載,只能打印且只能打印一次,這就需要考慮使用控件了。
2、Adobe Reader
Adobe Reader是一款優秀的PDF文檔閱讀軟件。你可以使用Adobe Reader查看、打印和管理PDF文件,還可以使用 Adobe Reader的多媒體工具可以播放PDF中的視頻和音樂。
這裏我們會用到Adobe Reader裏面自帶的頁面控件來實現pdf文件的打印功能。
3、頁面調用Adobe Reader自帶的控件實現pdf打印
<html>
<head>
<meta charset="UTF-8">
<title>pdf打印</title>
</head>
<body>
<div align="center">
<object id="pdfObj" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="950" height="562" border="0">
<param name="src" value="print/myfile.pdf" />
</object>
</div>
</body>
</html>
需要注意的一點是,360瀏覽器打開頁面時,必須用兼容模式,不然預期功能無法實現。
下面是博主的案例:
當我們移動鼠標時,頁面上會浮現出一個工具欄:
這個浮動工具欄有5個按鈕,他們的作用從左到右分別是:保存,打印,縮小,放大,顯示工具欄。
這裏我們點擊打印按鈕,就可以彈出操作系統自帶的打印配置頁面了:
配置好相關屬性後,點擊打印即可成功打印pdf文件。
4、關閉控件的下載功能,且保證用戶只能打印1次pdf文件
當有預覽界面的時候,用戶總能進行下載,所以我們可以去掉預覽界面:將object控件中的width和height兩個屬性均設置爲0
去掉預覽界面後,我們可以用js代碼調用控件提供的相關接口進行打印,代碼如下:
<html>
<head>
<meta charset="UTF-8">
<title>pdf打印</title>
</head>
<body>
<div align="center">
<button id="prtBtn" onclick="printPage()">打印(P)</button>
<object id="pdfObj" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="0" height="0" border="0">
<param name="src" value="print/myfile.pdf" />
</object>
</div>
<script type="text/javascript">
function printPage(){
try {
pdfObj.PrintAll();
document.getElementById("prtBtn").setAttribute("disabled", true);
} catch (e) {
alert("未安裝adobe reader插件,請聯繫管理員安裝!");
}
}
</script>
</body>
</html>
該頁面只會顯示一個打印按鈕:
如此,點擊打印之後,打印按鈕變灰,且跳過打印配置頁,直接打印pdf文件(這個時候打印會根據系統配置的默認打印機來打印)。
附:Adobe Reader ActiveX控件對外發布的功能說明
(參考:控件接口實現源碼-英文版)
1、GetAcroPdfVersion:獲取一個顯示Acrobat ActiveX控件版本的值
2、GoBackwardStack:如果前面的視圖存在,則轉到視圖堆棧上的先前視圖。前面的視圖可能在不同的文檔中
3、GoForwardStack:如果下一個視圖存在,則轉到視圖堆棧的下一個視圖。下一個視圖可能在另一個文檔中
4、GotoFirstPage:轉到文檔的第一頁,保持頁面內的當前位置和縮放級別
5、GotoLastPage:進入文檔的最後一頁,保持頁面內的當前位置和縮放級別
6、GotoNextPage:如果存在,則進入文檔的下一頁。保持頁面內的當前位置和縮放級別
7、GotoPreviousPage:如果存在,則進入文檔的前一頁。保持頁面內的當前位置和縮放級別
8、LoadFile:打開並在瀏覽器中顯示指定的文檔
9、PostMessage:(這個函數沒有被Adobe記錄下來)
10、Print:根據用戶對話框中選擇的選項打印文檔。這些選項包括嵌入式打印(在給定頁面上的一個邊界矩形內打印),以及對指定的打印機進行交互式打印。
11、PrintAll:在不顯示用戶對話框的情況下打印整個文檔。使用默認的打印機、頁面設置和作業設置。
12、PrintAllFit:在不顯示用戶對話框的情況下打印整個文檔,如果需要,頁面會縮小,以適應打印機中頁面的可想象區域。使用默認的打印機、頁面設置和作業設置。
*注:其有1個參數,在打印文檔時確定是否要縮放可映像區域。值爲0表示不應該使用擴展,而正值值表明,如果需要,頁面會縮小,以適應打印機中頁面的可想象區域。
13、PrintPages:打印指定的頁面,而不顯示用戶對話框。使用默認的打印機、頁面設置和作業設置。
*注:其有2個參數,指定打印第幾頁到第幾頁
14、PrintPagesFit:打印指定的頁面,而不顯示用戶對話框。使用默認的打印機、頁面設置和作業設置
*注:其中第3個參數表示在打印文檔時確定是否要縮放可映像區域。值爲0表示不應該使用擴展,而正值值表明,如果需要,頁面會縮小,以適應打印機中頁面的可想象區域。
15、PrintWithDialog:根據用戶對話框中選擇的選項打印文檔。這些選項包括嵌入式打印(在給定頁面上的一個邊界矩形內打印),以及對指定的打印機進行交互式打印。
16、SetCurrentHighlight:突出顯示當前頁面中指定的邊界矩形中的文本選擇。
17、SetCurrentPage:轉到文檔中指定的頁面。保持頁面內的當前位置和縮放級別
18、SetLayoutMode:根據指定的值設置頁面視圖的佈局模式
19、SetNamedDest:將頁面視圖更改爲指定字符串中的指定目標
20、SetPageMode:根據指定的值設置頁面模式
21、ShowScrollbars:確定滾動條是否會出現在文檔視圖中
22、ShowToolbar:確定工具欄是否會出現在查看器中
23、SetView:根據指定的字符串設置頁面的視圖
24、SetViewRect:根據指定的座標設置視圖矩形(X偏移,Y偏移,寬度,高度)
25、SetViewScroll:根據指定的字符串設置頁面的視圖。根據視圖模式,頁面要麼滾動到右邊,要麼按偏移量指定的數量進行滾動。
26、Zoom:根據指定的值設置放大率
27、SetZoomScroll:根據指定的值設置放大率,並根據指定的數量水平和垂直滾動頁面視圖。
首次發博文,希望各位朋友積極評論,不吝賜教!
如果你想要聯繫博主,可以加博主的私人QQ:987031490