網(wǎng)頁打印問題,打印設(shè)置,打印預(yù)覽,打印分頁,縱打,橫打及頁面的邊距 (轉(zhuǎn)載)
????1、控制"縱打"、 橫打”和“頁面的邊距
????(1)
????<object id="factory" style="display:none" viewastext classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
????codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360"></object>
????<script defer>
????function SetPrintSettings() {
????// -- advanced features
????factory.printing.SetMarginMeasure(2) // measure margins in inches
????factory.SetPageRange(false, 1, 3) // need pages from 1 to 3
????factory.printing.printer = "HP DeskJet 870C"
????factory.printing.copies = 2
????factory.printing.collate = true
????factory.printing.paperSize = "A4"
????factory.printing.paperSource = "Manual feed"
????
????// -- basic features
????factory.printing.header = "This is MeadCo"
????factory.printing.footer = "Advanced Printing by ScriptX"
????factory.printing.portrait = false
????factory.printing.leftMargin = 1.0
????factory.printing.topMargin = 1.0
????factory.printing.rightMargin = 1.0
????factory.printing.bottomMargin = 1.0
????}
????</script>
????
????(2)
????<script language="javascript">
???? function printsetup(){
???? // 打印頁面設(shè)置
???? wb.execwb(8,1);
???? }
???? function printpreview(){
???? // 打印頁面預(yù)覽
????
???? wb.execwb(7,1);
????
????
???? }
????
???? function printit()
???? {
???? if (confirm('確定打印嗎?')) {
???? wb.execwb(6,6)
???? }
???? }
???? </script>
????</head>
????<body>
????<OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"
????
????height=0 id=wb name=wb width=0></OBJECT>
????<input type=button name=button_print value="打印"
????
????onclick="javascriptrintit()">
????<input type=button name=button_setup value="打印頁面設(shè)置"
????
????onclick="javascriptrintsetup();">
????<input type=button name=button_show value="打印預(yù)覽"
????
????onclick="javascriptrintpreview();">
????<input type=button name=button_fh value="關(guān)閉"
????
????onclick="javascript:window.close();">
????
????------------------------------------------------
????關(guān)于這個組件還有其他的用法,列舉如下:
????WebBrowser.ExecWB(1,1) 打開
????Web.ExecWB(2,1) 關(guān)閉現(xiàn)在所有的IE窗口,并打開一個新窗口
????Web.ExecWB(4,1) 保存網(wǎng)頁
????Web.ExecWB(6,1) 打印
????Web.ExecWB(7,1) 打印預(yù)覽
????Web.ExecWB(8,1) 打印頁面設(shè)置
????Web.ExecWB(10,1) 查看頁面屬性
????Web.ExecWB(15,1) 好像是撤銷,有待確認
????Web.ExecWB(17,1) 全選
????Web.ExecWB(22,1) 刷新
????Web.ExecWB(45,1) 關(guān)閉窗體無提示
????
????2、分頁打印
????<HTML>
????<HEAD>
????<STYLE>
???? P {page-break-after: always}
????</STYLE>
????</HEAD>
????<BODY>
????<%while not rs.eof%>
????<P><%=rs(0)%></P>
????<%rs.movenext%>
????<%wend%>
????</BODY>
????</HTML>
????
????3、ASP頁面打印時如何去掉頁面底部的路徑和頂端的頁碼編號
????(1)ie的文件-〉頁面設(shè)置-〉講里面的頁眉和頁腳里面的東西都去掉,打印就不出來了。
????(2)<HTML>
????<HEAD>
????<TITLE> New Document </TITLE>
????<META NAME="Generator" CONTENT="EditPlus">
????<META NAME="Author" CONTENT="YC">
????<script language="VBScript">
????dim hkey_root,hkey_path,hkey_key
????hkey_root="HKEY_CURRENT_USER"
????hkey_path="\Software\Microsoft\Internet Explorer\PageSetup"
????'//設(shè)置網(wǎng)頁打印的頁眉頁腳為空
????function pagesetup_null()
????on error resume next
????Set RegWsh = CreateObject("WScript.Shell")
????hkey_key="\header"
????RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""
????hkey_key="\footer"
????RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""
????end function
????'//設(shè)置網(wǎng)頁打印的頁眉頁腳為默認值
????function pagesetup_default()
????on error resume next
????Set RegWsh = CreateObject("WScript.Shell")
????hkey_key="\header"
????RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&w&b頁碼,&p/&P"
????hkey_key="\footer"
????RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&u&b&d"
????end function
????</script>
????</HEAD>
????
????<BODY>
????<br/>
????<br/>
????<br/>
????<br/>
????<br/>
????<br/><p align=center>
????<input type="button" value="清空頁碼" onclick=pagesetup_null()> <input type="button" value="恢復(fù)頁嗎" onclick=pagesetup_default()><br/>
????
????</p>
????</BODY>
????</HTML>
????4、浮動幀打印
????<SCRIPT LANGUAGE=javascript>
????function button1_onclick() {
???? var odoc=window.iframe1.document;
???? var r=odoc.body.createTextRange();
???? var stxt=r.htmlText;
???? alert(stxt)
???? var pwin=window.open("","print");
???? pwin.document.write(stxt);
???? pwin.document.close();
???? pwin.print();
????}
????</SCRIPT>
????5、用FileSystem組件實現(xiàn)WEB應(yīng)用中的本地特定打印
????<script Language=VBScript>
????function print_onclick //打印函數(shù)
????dim label
????label=document.printinfo.label.value //獲得HTML頁面的數(shù)據(jù)
????set objfs=CreateObject("Scripting.FileSystemObject") //創(chuàng)建FileSystem組件對象的實例
????set objprinter=objfs.CreateTextFile ("LPT1:",true) //建立與打印機的連接
????objprinter.Writeline("__________________________________") //輸出打印的內(nèi)容
????objprinter.Writeline("| |")
????objprinter.Writeline("| 您打印的數(shù)據(jù)是:"&label& " |”)
????objprinter.Writeline("| |")
????objprinter.Writeline("|_________________________________|")
????objprinter.close //斷開與打印機的連接
????set objprinter=nothing
????set objfs=nothing // 關(guān)閉FileSystem組件對象
????end function
????</script>
????服務(wù)器端腳本:
????<%………
????set conn=server.CreateObject ("adodb.connection")
????conn.Open "DSN=name;UID=XXXX;PWD=XXXX;"
????set rs=server.CreateObject("adodb.recordset")
????rs.Open(“select ……”),conn,1,1
????……….%> //與數(shù)據(jù)庫進行交互
????HTML頁面編碼:
????<HTML>
????………
????<FORM ID=printinfo NAME="printinfo" >
????<INPUT type="button" value="打印>>" id=print name=print > //調(diào)用打印函數(shù)
????<INPUT type=hidden id=text1 name=label value=<%=………%>> //保存服務(wù)器端傳來的數(shù)據(jù)
????………
????</HTML>
????
????
????
????這個是調(diào)用WORD,進行打印
????在<head></head>之間加入如下代碼;
????<OBJECT Classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0></OBJECT>
????<script language=javascript>
????function doPrintSetup(){
????WB.ExecWB(8,1)
????}
????function doPrintPreview(){
????WB.ExecWB(7,1)
????}
????</script>
????
????在<body>中調(diào)用:
????<input type=button name=button1 value="打印設(shè)置" onclick="return doPrintSetup()">
????<input type=button name=button2 value="打印預(yù)覽" onclick="return doPrintPreview()">
????<input type=button name=button3 value="打印本頁" onclick="javascriptrint()">
????
????6、設(shè)置不想打印的部分
????<style>
????@media print{
????.xx {display:none}
????}
????</style>
????<table width="600" class="xx" border="0" cellspacing="0" cellpadding="0">
???? <tr>
???? <td height="60" align="center">不想打印的表格</td>
???? </tr>
????</table>
????7、利用word在客戶端打印web頁面
????
????以前在asp中也碰到過實現(xiàn)在瀏覽器中打印的問題,特別是用局域網(wǎng)中的一些應(yīng)用,以前的實現(xiàn)定義一個打印開始的標記,和一個結(jié)束的標記,然后調(diào)用window.print()方法,還有涉及在使用frame時候的打印問題,在msdn的文檔中有關(guān)于這些的比較詳細的介紹,但是,控制起來都比較的麻煩,而且對與打印比較精確的控制都比較難以實現(xiàn),有很多的朋友也碰到過這個問題,最近讀了一片文章,關(guān)于在web中的打印的實現(xiàn)(csdn),稍作修改,貼了出來,供大家參考一下,希望對大家有所幫助。
????可以調(diào)用客戶端的word進行打印前提是客戶端必須安裝word.
????方法如下:
????<%
????Response.ContentType = "application/msword"
????response.AddHeader "content-disposition", "inline; filename=report.doc"
????%>
????當把,一樣的內(nèi)容添加到,asp的上面時候,會在客戶端自動調(diào)用word打開當前的文檔,不過不要忘記把,response.buffer的屬性設(shè)定為false。
????
????8、在WEB環(huán)境下打印報表的crystal的解決方案的實例
????
????<%@ LANGUAGE="VBSCRIPT" %>
????<%
????' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
????' 從ADO Recordset直接生成報表
????' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
????'
????' 概念:
????'
????' 這個應(yīng)用被設(shè)計成演示怎樣從ADO Recordset生成報表。我們首先建立ADO Connection和
????' Recordset對象,然后用SQL語句從數(shù)據(jù)庫中生成一個記錄集。然后我們建立一個Crystal
????' Reports對象,并把這個這個對象指向ADO recordset。最后我們將Crystal Reports
????' Smart Viewer送到客戶端顯示這個報表。
????
????' 第一步:建立ADO Connection and Recordset
????
????' 一個ADO的數(shù)據(jù)庫連接就是通過你已經(jīng)存在的ODBC數(shù)據(jù)源(DSN)從象ASP這樣的應(yīng)用中來訪問
????' 數(shù)據(jù)的連接。為了達到這個例子的目的,我們將使用到用一個叫做"Xtreme Sample Data"的
????' 連到Access數(shù)據(jù)庫Xtreme.mdb系統(tǒng)DSN
????
????' 建立ADO數(shù)據(jù)庫連接:
????
????Set oConn = Server.CreateObject("ADODB.Connection")
????
????'這里建立叫做"oConn"的ADO connection,我們將用這個ADO connection對象連接到上述的DSN
????
????'用 ADO connection 必須先要打開它:
????
????oConn.Open("Xtreme Sample Database")
????
????'這里打開我們的ODBC的數(shù)據(jù)源,這個數(shù)據(jù)源指向Access數(shù)據(jù)庫Xtreme.mdb
????
????'現(xiàn)在我們必須建立一個RecordSet對象:
????
????set session("oRs") = Server.CreateObject("ADODB.Recordset")
????
????'在上面我們建立了一個session("oRs"). 這個session中存放一個RecordSet對象
????'將要包含用SQL語句返回的數(shù)據(jù)
????
????'定義和生成 recordset:
????
????session("oRs").ActiveConnection = oConn
????'定義這個recordset將要使用的Connection 對象
????
????session("oRs").Open "SELECT [Product ID], [Product Name] FROM Product"
????
????'用SQL語句從Xtreme.mdb庫的"Product"表中取出兩個字段
????
????'===================================================================================
????'建立Crystal Reports 對象
????'===================================================================================
????'你可能注意到,Crystal Reports對象被設(shè)為session,這是因為已經(jīng)需求就會被一個叫做
????'"rptserver.asp"的ASP處理,為了讓rptserver.asp能非常容易地訪問Crystal Report對象,
????'我們把這些對象都設(shè)為session。這樣任何ASP頁都運行在這個session中,都能夠直接訪問這些對象
????
????reportname = "ADORecordset.rpt"
????
????'這里建立一個字符串變量,指向Crystal Report文件(.rpt file),再用這段代碼的時候
????'換成你的Crystal Report文件名。
????
????'建立APPLICATION 對象
????If Not IsObject (session("oApp")) Then
????Set session("oApp") = Server.CreateObject("CrystalRuntime.Application")
????End If
????
????'這個"if/end if" 結(jié)構(gòu)用來每個session只建立一次 Crystal Reports Application對象o
????'建立application對象 - session("oApp"),將Crystal Report Design Component
????'automation server (craxdrt.dll)載入內(nèi)存。
????'
????'我們建立session變量是為了再asp session過程中都使用它們.這樣可以減少將craxdrt.dll
????'載入和卸載的系統(tǒng)開銷。在一個session中一旦建立了一個application對象我們就可以不必
????'重建對象運行更多的報表 。
????
????' 建立REPORT 對象
????'
????'這個REPORT 對象被Application的OpenReport方法建立
????
????Path = Request.ServerVariables("PATH_TRANSLATED")
????While (Right(Path, 1) <> "\" And Len(Path) <> 0)
????iLen = Len(Path) - 1
????Path = Left(Path, iLen)
????Wend
????response.Write path
????'這個"While/Wend" 循環(huán)被用來將當前文件從虛擬路徑(eg: http://Domain/Dir)轉(zhuǎn)換成Crystal
????' Report file的物理路徑(eg: C:\)
????
????'打開REPORT (先清除以前的任何對象)
????
????If IsObject(session("oRpt")) then
????Set session("oRpt") = nothing
????End if
????
????On error resume next
????
????Set session("oRpt") = session("oApp").OpenReport(path & reportname, 1)
????'這里用"PATH" 和 "reportname"變量計算出Crystal Report file的物理路徑, 并打開它。
????
????If Err.Number <> 0 Then
????Response.Write "Error Occurred creating Report Object: " & Err.Description
????Set Session("oRpt") = nothing
????Set Session("oApp") = nothing
????Session.Abandon
????Response.End
????End If
????
????'這個 On erro resume next 塊檢查在建立report對象時出現(xiàn)的任何錯誤,我們正明確的捕獲任何
????'錯誤如果視圖超過許可協(xié)議規(guī)定的最大并發(fā)用戶數(shù)。
????
????'注意,我們并不只建立一次report對象。這是因為有了ASP session 你可以處理更多的超過一個報表
????' rptserver.asp將僅僅處理一個叫session("oRpt")的report對象。因此,你如果希望處理多個報表
????'的話,就要建立一個新的session("oRpt")對象。
????
????session("oRpt").MorePrintEngineErrorMessages = False
????session("oRpt").EnableParameterPrompting = False
????
????'這里不允許錯誤報告機制,包括Crystal Report Design Component automation server (craxdrt.dll)
????'內(nèi)建的錯誤報告,這是因為兩個原因:
????'1. 打印引擎是在Web Server上執(zhí)行的, 所以任何錯誤信息都將被顯示在服務(wù)端,如果在服務(wù)端報告出錯了,
????' 打印引擎將停止運作,你的應(yīng)用將被“掛起”
????'2. rptserver.asp 已經(jīng)有一些錯誤處理邏輯在里面了,可以捕獲任何非致命錯誤,并顯示在客戶端。
????'
????'**重要** 即使我們禁止了服務(wù)端引擎的錯誤處理,但是致命錯誤還是會在Web Server服務(wù)端被捕獲,并
????'顯示出錯誤提示對話框。所以我們建議,你在"World Wide Web Publishing" service (IIS service)設(shè)置
????'"Allow Service to Interact with Desktop"選項。這樣如果你的ASP應(yīng)用死了,你將能看到錯誤提示。
????
????'======================================================================================
????'======================================================================================
????
????'現(xiàn)在我們必須告訴report在ADO recordset中的數(shù)據(jù)
????
????'report建立在動態(tài)的ADO recordset的基礎(chǔ),我們必須基于我們建立的recordset來建立report
????'然后在運行時我們告訴report數(shù)據(jù)在ADO Record set中。report通常依靠數(shù)據(jù)庫結(jié)構(gòu)文件
????'(ADORecordset.ttx)建立,這個.ttx文件包含recordset的結(jié)構(gòu),不包含實際數(shù)據(jù)。
????
????'一個Crystal Report完全依賴將要使用的Report的數(shù)據(jù)結(jié)構(gòu),因此在運行時你的數(shù)據(jù)庫結(jié)構(gòu)文件(ttx file)
????'或真實反應(yīng)ADO recordset包含的數(shù)據(jù)的DSN是十分重要的
????
????session("oRpt").DiscardSavedData
????set Database = session("oRpt").Database
????'實例化report用到的數(shù)據(jù)庫
????
????set Tables = Database.Tables
????'實例化數(shù)據(jù)庫對象中的表
????
????set Table1 = Tables.Item(1)
????'實例化第一張表,在這個實例中這個表對象指向ADORecordset.ttx文件
????
????Table1.SetPrivateData 3, session("oRs")
????
????'"SetPrivateData"告訴report現(xiàn)在數(shù)據(jù)源是 recordset,現(xiàn)在report將要顯示的數(shù)據(jù)包含在session("oRs")中
????'如果你的report中包含子報表將提供不同的recordset來指向子報表的數(shù)據(jù)
????'
????'====================================================================================
????'重新得到記錄和建立"Page on Demand" Engine Object
????'====================================================================================
????
????On Error Resume Next
????session("oRpt").ReadRecords
????
????If Err.Number <> 0 Then
????Response.Write "Error Occurred Reading Records: " & Err.Description
????Set Session("oRpt") = nothing
????Set Session("oApp") = nothing
????Session.Abandon
????Response.End
????Else
????If IsObject(session("oPageEngine")) Then
????set session("oPageEngine") = nothing
????End If
????set session("oPageEngine") = session("oRpt").PageEngine
????End If
????
????' 實例化 CRYSTAL REPORTS SMART VIEWER
????'
????'在ASP環(huán)境中使用Crystal Reports automation server, 我們用相同的頁來通過Crystal Web Report Server調(diào)用
????'"Smart Viewers"
????'有四個 Crystal Reports Smart Viewers:
????'
????'1. ActiveX Smart Viewer
????'2. Java Smart Viewer
????'3. HTML Frame Smart Viewer
????'4. HTML Page Smart Viewer
????'
????'你使用的Smart Viewer將與你數(shù)用的瀏覽器兼容的,例如你將不會使用Java viewer如果你的瀏覽器
????'不支持Java applets。為此,在這個DEMO中,我們已經(jīng)選擇定義一個viewer,你可以通過代碼決定
????'提出要求的瀏覽器的支持兼容性,無論如何,這個功能繼承自Crystal Reports automation server,
????'超過了這個示例的范圍。
????
????'基于簡單的理由,我們已經(jīng)選擇通過ASP服務(wù)端包含的功能來實現(xiàn)這個功能,你可以選擇不同的
????'SmartViewer*.asp文件送到不同的瀏覽器,簡單的用你想用的Smart Viewer asp文件來代替。
????
????'這些選擇是: SmartViewerActiveX.asp, SmartViewerJave.asp,SmartViewerHTMLFrame.asp,
????'and SmartViewerHTMLPAge.asp.注意,使用這些包含文件時,你必須把相應(yīng)的.ASP文件放在同主
????'ASP文件相同的虛擬路徑中。
????'
????'*注意* 對于 SmartViewerHTMLFrame and SmartViewerHTMLPage,你必須在虛擬路徑中有framepage.asp
????'文件和toolbar.asp 文件
????
????viewer = Request.Form("Viewer")
????
????'上面讀取被使用的viewer的值,并放入變量"viewer"中
????
????If cstr(viewer) = "ActiveX" then
????%>
????<!-- #include file="SmartViewerActiveX.asp" -->
????<%
????ElseIf cstr(viewer) = "Netscape Plug-in" then
????%>
????<!-- #include file="ActiveXPluginViewer.asp" -->
????<%
????ElseIf cstr(viewer) = "Java using Browser JVM" then
????%>
????<!-- #include file="SmartViewerJava.asp" -->
????<%
????ElseIf cstr(viewer) = "Java using Java Plug-in" then
????%>
????<!-- #include file="JavaPluginViewer.asp" -->
????<%
????ElseIf cstr(viewer) = "HTML Frame" then
????Response.Redirect("htmstart.asp")
????Else
????Response.Redirect("rptserver.asp")
????End If
????'上面 If/Then/Else 被設(shè)計測試"viewer" 變量的值,基于這個值,送適當?shù)腃rystal Smart Viewer
????%>
posted on 2007-01-16 17:46
OMG 閱讀(3735)
評論(0) 編輯 收藏 所屬分類:
J2EE