頁面調用Adobe Reader自帶的控件實現pdf打印

1、業務場景


       一般的業務場景裏,只需要將pdf文件下載到本地,然後打開直接打印就可以了。

      但是,有的場景會考慮到pdf文件的敏感性,需要pdf文件不能被下載,只能打印且只能打印一次,這就需要考慮使用控件了。


2、Adobe Reader


      Adobe Reader是一款優秀的PDF文檔閱讀軟件。你可以使用Adobe Reader查看、打印和管理PDF文件,還可以使用 Adobe Reader的多媒體工具可以播放PDF中的視頻和音樂。

      這裏我們會用到Adobe Reader裏面自帶的頁面控件來實現pdf文件的打印功能。

      點擊下載Adobe Reader XI 11


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>


      其中<param name="src" value="print/myfile.pdf" />  中的value是pdf文件的相對路徑。

      需要注意的一點是,360瀏覽器打開頁面時,必須用兼容模式,不然預期功能無法實現。


      下面是博主的案例

       Adobe Reader ActiveX控件 打印pdf文件案例1


      當我們移動鼠標時,頁面上會浮現出一個工具欄:


       預覽界面浮動工具欄


      這個浮動工具欄有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>


      該頁面只會顯示一個打印按鈕:


      Adobe Reader ActiveX控件 打印pdf文件案例2


      如此,點擊打印之後,打印按鈕變灰,且跳過打印配置頁,直接打印pdf文件(這個時候打印會根據系統配置的默認打印機來打印)。

附:Adobe Reader ActiveX控件對外發布的功能說明


      (參考:控件接口實現源碼-英文版

      Adobe Reader ActiveX控件提供的Methods


      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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章