Javascript呼叫IE列印以及預覽列印的方法

七月 31, 2008 at 12:46 下午 | 張貼於Javascript/HTML | 13 則迴響
標籤: , , , , , ,

剛好有機會用到,所以我整理了Javascript關於IE列印的一些寫法,一般比較少見的,就是區塊列印以及區塊預覽列印,可能很多人都不曉得要怎麼處 理,以下是我查了一些語法資料,然後自己寫個sample測試出來的code,我的寫法不一定是最好的,如果大家如果有發現更好的寫法,希望可以互相交流 一下。

整頁列印:
html部分:
<INPUT TYPE="button" value="整頁列印" onclick="print()">

Javascript部分:
N/A

部分列印(只列印div包起來的網頁):
html部分:
<div id="block">
<P><img id=
"ruten" name="ruten" SRC="http://www.ruten.com.tw/imgs/2008/logo.gif"></P>
</div>
<input type=
"button" value="部分列印" onclick="printScreen(block)">

Javascript部分:
//列印div包起來的部分並且列印完畢後自動關閉列印網頁
function printScreen(block){
var value = block.innerHTML;
var printPage = window.open(
"","printPage","");
printPage.document.open();
printPage.document.write(
"<HTML><head></head><BODY onload='window.print();window.close()'>");
printPage.document.write(
"<PRE>");
printPage.document.write(value);
printPage.document.write(
"</PRE>");
printPage.document.close(
"</BODY></HTML>");
}

整頁預覽列印:
html部分:
<OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" height=0 id=wb name=wb width=0></OBJECT>
<INPUT TYPE=
"button" value="整頁預覽" onclick="javascript:wb.execwb(7,1)">

Javascript部分:
N/A

部分預覽列印(只預覽div包起來的部份):
html部分:
<div id="block">
<P><img id=
"ruten" name="ruten" SRC="http://www.ruten.com.tw/imgs/2008/logo.gif"></P></div>
<input type=
"button" value="區塊預覽" onclick="previewScreen(block)">

Javascript部分:
//預覽div包起來的部分並且列印完畢後自動關閉列印網頁
function previewScreen(block){
var value = block.innerHTML;
var printPage = window.open(
"","printPage","");
printPage.document.open();
printPage.document.write(
"<OBJECT classid='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2' height=0 id=wc name=wc width=0></OBJECT>");
printPage.document.write(
"<HTML><head></head><BODY onload='javascript:wc.execwb(7,1);window.close()'>");
printPage.document.write(
"<PRE>");
printPage.document.write(value);
printPage.document.write(
"</PRE>");
printPage.document.close(
"</BODY></HTML>");
}

13 則迴響 »

本篇文章迴響的訂閱源料 引用網址

  1. 請問板大這樣的語法是否目前電腦的安全性
    已預設不能使用了
    我找了很多類似的語法測試
    好像都是
    的安全性問題
    是可以在主機設定為安全嗎?
    我的是XP SP3 IE6
    都會跳出 訊息 這是不安全的ActionX
    然後按按鈕就跳出不支援此屬性或方法

    • 您好,Javascript是在client端執行的,所以您不能執行的問題是不會跟server有關係,您可以檢查看看把browser的近端網路安全性調低試試看,或是到進階裡面把ActiveX的選項都打開, 另外也可以改用firefox來測試看看,我這裡是都可以執行。

  2. 謝謝版大的說明
    小弟是想先讓使用者按按鈕可以預覽列印,我知道將AciveX及安性降低都可以正常跳出預覽頁面,只是出現不能正常使用時,要叫瀏覽者再去改電腦的設定,使用者一定會覺得麻煩,有的也不見得會改設定,想說是不是有什麼方法可以更有效的避免這種情況發生。
    另小弟請問板大在FireFox也是能夠使用以上語法預覽列印嗎?
    wb.execwb(7,1)不是只有IE才能辨別?
    或是您是指print()函式
    謝謝

    • 您好, 我是Win2000+IE6, 用預設設定是都可以執行的, 晚點有空再幫你測XP+IE7, 另外預覽是只有IE可以用沒錯。

    • 您好,我測了一下IE7預設是會擋掉ActiveX,必須再另外開啟, 至於ActiveX明明就是for IE only, 卻在IE7預設就把它擋掉, 真的是很怪的作法, 只能說微軟ActiveX的設計就很有問題。

      我後來google了一下,似乎沒有什麼比較有效的方法, 但是找到有個似乎可以模擬它成為localhost近端網路的程式,請參考這個連結。
      http://www.articulate.com/forums/articulate-presenter/3174-remove-activex-warning.html

      希望有幫到您 ^^

  3. 您好
    首先謝謝您分享的這份文章
    不過在使用上遇到一個問題

    我使用了部份預覽列印
    但是預覽的結果字型與對齊都會消失
    彷彿不曾設定過
    以下是我的程式碼



    ‘ 
    ‘ 

    ‘ 資料庫內容



    列印的部份與文章上相同
    以下是clean函數
    Function Clean(str As String)
    str=Replace(str,vbCrLf,"")
    Clean=Replace(str,chr(32),"  ")
    End Function

    但是按下列印的結果
    不管是置中對齊或是字體大小
    都和原本不同

    請問要如何解決

    • 您好,我測試了一下,是不會有這樣的問題發生喔,您好像有用到.Net的語法,可否把檔案寄給我nievorwei@gmail.com,我可以幫您測試看看。

  4. [...] {int} autoSplit 自動分頁,預設為0 * @param {int} autoPrint 自動打印,預設為0 * @see http://nievor.wordpress.com/2008/07/31/javascript_print_preview/ */ function JsPrinter [...]

  5. 我想請問
    這個列印程式可以控制列印的邊界嗎
    每次印出來左右都空一大片
    是否有方法改善呢

  6. 好用心喔!!
    謝謝分享喔~~~

  7. 感謝分享

  8. [...] JavaScript列印頁面非常簡單,只需要一行就可以達成,更多詳細資料可以參考Javascript呼叫IE列印以及預覽列印的方法@小峰峰的筆記本。 [...]

  9. 我在DIV裡放 好像按下去沒反應耶 會有影響嗎?


發表迴響

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

連結到 %s

在WordPress.com寫網誌. | Theme: Pool by Borja Fernandez.
項目留言 feeds.

Follow

Get every new post delivered to your Inbox.