網頁打印問題,打印設置,打印預覽,打印分頁,縱打,橫打及頁面的邊距 (轉載)
????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(){
???? // 打印頁面設置
???? wb.execwb(8,1);
???? }
???? function printpreview(){
???? // 打印頁面預覽
????
???? 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="打印頁面設置"
????
????onclick="javascriptrintsetup();">
????<input type=button name=button_show value="打印預覽"
????
????onclick="javascriptrintpreview();">
????<input type=button name=button_fh value="關閉"
????
????onclick="javascript:window.close();">
????
????------------------------------------------------
????關于這個組件還有其他的用法,列舉如下:
????WebBrowser.ExecWB(1,1) 打開
????Web.ExecWB(2,1) 關閉現在所有的IE窗口,并打開一個新窗口
????Web.ExecWB(4,1) 保存網頁
????Web.ExecWB(6,1) 打印
????Web.ExecWB(7,1) 打印預覽
????Web.ExecWB(8,1) 打印頁面設置
????Web.ExecWB(10,1) 查看頁面屬性
????Web.ExecWB(15,1) 好像是撤銷,有待確認
????Web.ExecWB(17,1) 全選
????Web.ExecWB(22,1) 刷新
????Web.ExecWB(45,1) 關閉窗體無提示
????
????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的文件-〉頁面設置-〉講里面的頁眉和頁腳里面的東西都去掉,打印就不出來了。
????(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"
????'//設置網頁打印的頁眉頁腳為空
????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
????'//設置網頁打印的頁眉頁腳為默認值
????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="恢復頁嗎" 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組件實現WEB應用中的本地特定打印
????<script Language=VBScript>
????function print_onclick //打印函數
????dim label
????label=document.printinfo.label.value //獲得HTML頁面的數據
????set objfs=CreateObject("Scripting.FileSystemObject") //創建FileSystem組件對象的實例
????set objprinter=objfs.CreateTextFile ("LPT1:",true) //建立與打印機的連接
????objprinter.Writeline("__________________________________") //輸出打印的內容
????objprinter.Writeline("| |")
????objprinter.Writeline("| 您打印的數據是:"&label& " |”)
????objprinter.Writeline("| |")
????objprinter.Writeline("|_________________________________|")
????objprinter.close //斷開與打印機的連接
????set objprinter=nothing
????set objfs=nothing // 關閉FileSystem組件對象
????end function
????</script>
????服務器端腳本:
????<%………
????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
????……….%> //與數據庫進行交互
????HTML頁面編碼:
????<HTML>
????………
????<FORM ID=printinfo NAME="printinfo" >
????<INPUT type="button" value="打印>>" id=print name=print > //調用打印函數
????<INPUT type=hidden id=text1 name=label value=<%=………%>> //保存服務器端傳來的數據
????………
????</HTML>
????
????
????
????這個是調用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>中調用:
????<input type=button name=button1 value="打印設置" onclick="return doPrintSetup()">
????<input type=button name=button2 value="打印預覽" onclick="return doPrintPreview()">
????<input type=button name=button3 value="打印本頁" onclick="javascriptrint()">
????
????6、設置不想打印的部分
????<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中也碰到過實現在瀏覽器中打印的問題,特別是用局域網中的一些應用,以前的實現定義一個打印開始的標記,和一個結束的標記,然后調用window.print()方法,還有涉及在使用frame時候的打印問題,在msdn的文檔中有關于這些的比較詳細的介紹,但是,控制起來都比較的麻煩,而且對與打印比較精確的控制都比較難以實現,有很多的朋友也碰到過這個問題,最近讀了一片文章,關于在web中的打印的實現(csdn),稍作修改,貼了出來,供大家參考一下,希望對大家有所幫助。
????可以調用客戶端的word進行打印前提是客戶端必須安裝word.
????方法如下:
????<%
????Response.ContentType = "application/msword"
????response.AddHeader "content-disposition", "inline; filename=report.doc"
????%>
????當把,一樣的內容添加到,asp的上面時候,會在客戶端自動調用word打開當前的文檔,不過不要忘記把,response.buffer的屬性設定為false。
????
????8、在WEB環境下打印報表的crystal的解決方案的實例
????
????<%@ LANGUAGE="VBSCRIPT" %>
????<%
????' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
????' 從ADO Recordset直接生成報表
????' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
????'
????' 概念:
????'
????' 這個應用被設計成演示怎樣從ADO Recordset生成報表。我們首先建立ADO Connection和
????' Recordset對象,然后用SQL語句從數據庫中生成一個記錄集。然后我們建立一個Crystal
????' Reports對象,并把這個這個對象指向ADO recordset。最后我們將Crystal Reports
????' Smart Viewer送到客戶端顯示這個報表。
????
????' 第一步:建立ADO Connection and Recordset
????
????' 一個ADO的數據庫連接就是通過你已經存在的ODBC數據源(DSN)從象ASP這樣的應用中來訪問
????' 數據的連接。為了達到這個例子的目的,我們將使用到用一個叫做"Xtreme Sample Data"的
????' 連到Access數據庫Xtreme.mdb系統DSN
????
????' 建立ADO數據庫連接:
????
????Set oConn = Server.CreateObject("ADODB.Connection")
????
????'這里建立叫做"oConn"的ADO connection,我們將用這個ADO connection對象連接到上述的DSN
????
????'用 ADO connection 必須先要打開它:
????
????oConn.Open("Xtreme Sample Database")
????
????'這里打開我們的ODBC的數據源,這個數據源指向Access數據庫Xtreme.mdb
????
????'現在我們必須建立一個RecordSet對象:
????
????set session("oRs") = Server.CreateObject("ADODB.Recordset")
????
????'在上面我們建立了一個session("oRs"). 這個session中存放一個RecordSet對象
????'將要包含用SQL語句返回的數據
????
????'定義和生成 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對象被設為session,這是因為已經需求就會被一個叫做
????'"rptserver.asp"的ASP處理,為了讓rptserver.asp能非常容易地訪問Crystal Report對象,
????'我們把這些對象都設為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" 結構用來每個session只建立一次 Crystal Reports Application對象o
????'建立application對象 - session("oApp"),將Crystal Report Design Component
????'automation server (craxdrt.dll)載入內存。
????'
????'我們建立session變量是為了再asp session過程中都使用它們.這樣可以減少將craxdrt.dll
????'載入和卸載的系統開銷。在一個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" 循環被用來將當前文件從虛擬路徑(eg: http://Domain/Dir)轉換成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對象時出現的任何錯誤,我們正明確的捕獲任何
????'錯誤如果視圖超過許可協議規定的最大并發用戶數。
????
????'注意,我們并不只建立一次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)
????'內建的錯誤報告,這是因為兩個原因:
????'1. 打印引擎是在Web Server上執行的, 所以任何錯誤信息都將被顯示在服務端,如果在服務端報告出錯了,
????' 打印引擎將停止運作,你的應用將被“掛起”
????'2. rptserver.asp 已經有一些錯誤處理邏輯在里面了,可以捕獲任何非致命錯誤,并顯示在客戶端。
????'
????'**重要** 即使我們禁止了服務端引擎的錯誤處理,但是致命錯誤還是會在Web Server服務端被捕獲,并
????'顯示出錯誤提示對話框。所以我們建議,你在"World Wide Web Publishing" service (IIS service)設置
????'"Allow Service to Interact with Desktop"選項。這樣如果你的ASP應用死了,你將能看到錯誤提示。
????
????'======================================================================================
????'======================================================================================
????
????'現在我們必須告訴report在ADO recordset中的數據
????
????'report建立在動態的ADO recordset的基礎,我們必須基于我們建立的recordset來建立report
????'然后在運行時我們告訴report數據在ADO Record set中。report通常依靠數據庫結構文件
????'(ADORecordset.ttx)建立,這個.ttx文件包含recordset的結構,不包含實際數據。
????
????'一個Crystal Report完全依賴將要使用的Report的數據結構,因此在運行時你的數據庫結構文件(ttx file)
????'或真實反應ADO recordset包含的數據的DSN是十分重要的
????
????session("oRpt").DiscardSavedData
????set Database = session("oRpt").Database
????'實例化report用到的數據庫
????
????set Tables = Database.Tables
????'實例化數據庫對象中的表
????
????set Table1 = Tables.Item(1)
????'實例化第一張表,在這個實例中這個表對象指向ADORecordset.ttx文件
????
????Table1.SetPrivateData 3, session("oRs")
????
????'"SetPrivateData"告訴report現在數據源是 recordset,現在report將要顯示的數據包含在session("oRs")中
????'如果你的report中包含子報表將提供不同的recordset來指向子報表的數據
????'
????'====================================================================================
????'重新得到記錄和建立"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環境中使用Crystal Reports automation server, 我們用相同的頁來通過Crystal Web Report Server調用
????'"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將與你數用的瀏覽器兼容的,例如你將不會使用Java viewer如果你的瀏覽器
????'不支持Java applets。為此,在這個DEMO中,我們已經選擇定義一個viewer,你可以通過代碼決定
????'提出要求的瀏覽器的支持兼容性,無論如何,這個功能繼承自Crystal Reports automation server,
????'超過了這個示例的范圍。
????
????'基于簡單的理由,我們已經選擇通過ASP服務端包含的功能來實現這個功能,你可以選擇不同的
????'SmartViewer*.asp文件送到不同的瀏覽器,簡單的用你想用的Smart Viewer asp文件來代替。
????
????'這些選擇是: SmartViewerActiveX.asp, SmartViewerJave.asp,SmartViewerHTMLFrame.asp,
????'and SmartViewerHTMLPAge.asp.注意,使用這些包含文件時,你必須把相應的.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 被設計測試"viewer" 變量的值,基于這個值,送適當的Crystal Smart Viewer
????%>
posted on 2007-01-16 17:46
OMG 閱讀(3735)
評論(0) 編輯 收藏 所屬分類:
J2EE