前幫客戶做合同和協議打印的時候,收集過一些打印相關的資料,整理了一下內容,分享給有需要的朋友。
<body>
<object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0"></object>
</body>
<script>
WebBrowser.ExecWB(1,1) // 打開
WebBrowser.ExecWB(2,1) // 關閉現在所有的IE窗口,并打開一個新窗口
WebBrowser.ExecWB(4,1) // 保存網頁
//--------------- 常用 --------------
WebBrowser.ExecWB(6,1) // 打印
WebBrowser.ExecWB(6,6) // 直接打印
WebBrowser.ExecWB(7,1) // 打印預覽
WebBrowser.ExecWB(8,1) // 打印頁面設置
//-------------------------------------
WebBrowser.ExecWB(10,1) // 查看頁面屬性
WebBrowser.ExecWB(15,1) // 撤銷
WebBrowser.ExecWB(17,1) // 全選
WebBrowser.ExecWB(22,1) // 刷新
WebBrowser.ExecWB(45,1) // 關閉窗體無提示
</script>
通過$("#id").print(/options/)和$('#id').printArea(/options/)調用,其中的options可以配置一些選項,具體看對應的說明文檔。
收費的、不收費的都有,這里就不多提了。
復雜的套打可以選第三方插件。jQuery插件是封裝的print方法,我前幾年給銀行網點做了個小系統需要局部打印,選了插件,其實沒有很理想,需要自己做一些調整才行。大部分情況用print就能解決。
頁面上顯示的內容與最終需要打印的內容之間總是存在差異的,從兩個方向解決這個問題,一個是打印時只顯示需要打印的部分,另一個是打印前調整頁面的內容,只保留需要打印的部分。可以用到下面幾個方法:
css media query 可以寫一些只在打印時有效的樣式,例如控制頁面某個按鈕打印時隱藏
@media print{
.no-print{
display:none
}
}
可以用onbeforeprint和onafterprint在打印前重新編輯內容,專門送去打印,打印后又處理回來。
function window.onbeforeprint()
{ //將一些不需要打印的隱藏 }
function window.onafterprint()
{ //放開隱藏的元素 }
// polyfill
// 對于基于Webkit的瀏覽器,您可以創建一個等效的結果window.matchMedia('print')。
// var mediaQueryList = window.matchMedia('print');
// mediaQueryList.addListener('change', function(mql) {
// if(mql.matches) {
// console.log('webkit equivalent of onbeforeprint');
// }
// });
onbeforeprint 在設置頁面打印之后但是在打印對話框出現之前執行 JavaScript
onafterprint 定義為在設置頁面打印且打印對話框已出現之后,執行一段 JavaScript。只有 Internet Explorer 和 Firefox 支持 onafterprint 事件屬性。但是:在 IE 中,onafterprint=屬性在打印對話框出現之前而不是之后發生。
onbeforeprint fired before dialog appears and allows one to change html and so on.onafterprint is fired just before dialog appears. It is not even possible to know, whether document was actually printed or user canceled it. Needless to say about when printing finished (if started at all).Again: no event is available to track anything happened in print dialog, i.e. answer to your question is no.Moreover, I hope what your need will never be implemented, cause this allows to frustrate user. He/she asks to print one document, but got something different.
改變頁面內容的方式體驗比較糟糕,個人不推薦,jq插件默認是用iframe,其實還可以window.open一個單獨的打印頁面,預覽和打印都好解決,兩種方式都需要注意樣式表是在原來的頁面,需要稍微注意下樣式是否有缺失。
page-break-before:always;
page-break-after:always;
page-break-inside:avoid;
用樣式可以控制主動使用分頁符,沒用過的可以看下這里
http://www.w3school.com.cn/cssref/pr_print_page-break-after.asp
有3種辦法,但都有限制
網上下載ScriptX.cab文件
下載成功后將文件放在項目某個目錄下,然后在頁面body中寫上:
<object id="factory" name="factory" style="display: none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="ScriptX.cab" viewastext></object>
codebase屬性為ScriptX.cab文件的放置路徑(絕對路徑)
調用:factory.printing.Print(false)即可
需要修改IE瀏覽器安全設置,否則還是會彈出對話框
然后執行
document.getElementById('WebBrowser').ExecWB(6,2,3)
可以使用vb,但是IE11開始已經被微軟廢棄,無法執行vb代碼了。
execScript('document.getElementById("WebBrowser").ExecWB 6, 2, 3','vbscript');
無邊距打印是打印機的一種功能,即全幅打印,打印紙不留空白。
適用于照片打印,廣告打印,海報打印等。
目前的主流打印機都有支持該功能的型號。
當在應用程序中創建用于打印的數據時,需要調整數據到打印紙的尺寸。如果應用程序中有邊距設置,應確保在打印前將它們設為零。
注意:
使用此功能進行打印將比普通打印要花更長時間。
使用此功能打印輸出的頂部和底部區域的打印質量可能會下降,或者在上面未列出的介質上打印時該區域可能會污損。在打印大量的作業之前先打印一頁以檢查打印質量。
遇到的一個需求,只打印合同中需要填寫數據的幾頁,不能使用自帶的頁碼,所以把自帶的頁碼去掉,然后寫個div定位到原來頁碼的位置,里面的內容就可以自己控制了。需要注意:
1. 頁面打印區域的原因,不是在任意打印機上都可以把頁碼打印在紙張的邊緣,需要根據打印機的可打印區域調整。
2. 頁碼需要使用到絕對定位,所以要求打印的內容是確定的,目前遇到有這個需求的,打印內容也都是固定的。
chrome 支持 @page 規則
@page{size : A4 lanscape;}
需要在打印首選項中設置。
注意:有時候需要通過加個空白頁來讓后面的內容從新的一張紙開始打印。
打印設置里可以修改,不過很難用程序控制打印份數。可以曲線實現,在打印的時候,直接把內容重復N遍再打印一份出來的就是N份了。
時代變得真快,現在的IE都已經退出了歷史舞臺。新框架一個接一個冒出來,老系統里的這些老代碼,不知道什么時候會消失。
多時候,你想給一個按鈕,在網頁上通過一個實際的打印機打印出網頁的內容。
JavaScript可使用window對象的print函數就可以實現這樣的功能。
當執行JavaScript的print函數window.print()將會打印當前頁面。可以使用onclick事件如下直接調用此函數:
<head>
<script type="text/javascript">
<!--
//-->
</script>
</head>
<body>
<form>
<input type="button" value="Print" onclick="window.print()" />
</form>
</body>1234567891011復制代碼類型:[javascript]
這將產生以下按鈕,打印此頁。
這符合打印出來的頁面,但這個不是一個推薦的方式。打印機友好的頁面實際上只是一個文本,沒有圖像,圖形或廣告頁面。
可以使用以下頁式打印機友好方式:
使頁面的副本,并離開了不需要的文本和圖形,然后從原始鏈接到該打印機友好的頁面。
如果你不想讓頁面的額外副本,那么可以使用像適當的注釋標記打印文本 <!-- PRINT STARTS HERE -->..... <!-- PRINT ENDS HERE --> 然后你可以使用PERL或其他腳本在后臺清除打印文本和顯示進行最后的打印。網站使用同樣的方法給打印設備對我們網站的訪客。
如果沒有人在提供上述設備,那么你可以使用瀏覽器的標準工具欄讓網頁打印出來。按照鏈接如下:
File --> Print --> Click OK button.
開課吧廣場-人才學習交流平臺
印網頁資料,被禁用了右鍵不讓復制,這個方法可以簡單的幫我們解決。
今天來了一位客戶,想打印一些資料,內容是來自某個網站上的一些文字,當我去復制的時候,才發現不讓復制,被禁用了鼠標右鍵,無論你怎么點都沒反應,整個頁面像是一幅圖片,于是搜索各種解除辦法,但都是比較繁瑣的一些招數,看的頭暈眼花,有的還要讓你下載插件安裝,這些都不能快速解決,不是我想要的方法,弄了好一會,終于找到了有效還簡單的方法,現在分享出來,讓有需要的人不在走彎路,節省時間,收藏一下以備不時之需要。
首頁用瀏覽器打開不讓復制的頁面,這里可以用普通瀏覽器或是某60瀏覽器,打開頁面后,我們要按一下鍵盤上的F12,這時候就會在當前網頁右邊跳出一個小頁面,點一下上面的小齒輪,一般我們把它稱做“設置”
進入小齒輪后,默認是第一個分類,我們要滑動鼠標輪,往下走到最底部,找到調試程序下面的第一個選項,停用JavaScript,給前面的方框打上對溝,這個時候不要關閉這個小頁面, 要是關閉了就失效了,也就是從頭要再來一次。
這個時候你再去復制網頁上的內容,看看是不是可以復制了。
說到這里,我還找到了一個更簡單的辦法,這個方法也給大家分享出來,希望有更多的人知道和學會。
在不讓復制的頁面,我們直接按下鍵盤上的ctrl+p,試試效果,是不是非常輕松的就解決了不讓復制的問題,這個辦法更簡單,更快捷,還可以直接打印,也可以把內容復制出來。
尋找方法不容易,喜歡的就收藏一下,您的支持就是我的動力。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。