如何让 IE 对页面进行横向排版打印?

 

        最近碰到一个难题:对 IE 页面中的内容进行横向打印,而且是无需用户选择的进行横向打印,而一直一来在IE 中打印页面,要想进行横向的打印,必须要手工进行选择,然后打印,但要求如此,没办法,只能找解决方法。

 

        但,在网上百度了很多次,依然没有找到合适简单的处理方式,要不就需要 ActiveX 控件,要不然就非常复杂。终于在别人的帮助下,我找到了这个页面,看起来很简单。页面地址如下:

 

http://web.tampabay.rr.com/bmerkey/examples/landscape-test.html

 

        我根据其方法,写了一段简单的测试代码,经验证,完成成功,当然仅对 Text 及 Tabel 组成的页面。代码如下:

<html>

<head>
<title>Landscape Printing</title>
<style type="text/css" media="print">
<!--
div.page  {
writing-mode: tb-rl;
height: 80%;
margin: 10% 0%;
}
div.page table {
margin-right: 80pt;
filter: progid:DXImageTransform.Microsoft.BasicImage(Rotation=1);

}
-->
</style>
</head>
<body>
<div class="page">
This is a test first row<br>
This is a test second row

<table border='1'>
<tr>
<td >aaa</td>
<td >bbb</td>
<td >ccc</td>
<td >ddd</td>
</tr>
<tr>
<td >123</td>
<td >456</td>
<td >789</td>
<td >012</td>
</tr>
</table>
</div>
</body>
</html>

 

        但后来发现一个问题,即当想在一个页面出现多个 Table 时,版面很不易控制,会出现以下几种情况:

1, 如Table 中行数很多,则会出现前几行无法显示或会和后几行重叠的情况;

2, 两个 Table 的间隔距离无法象正常显示一样,而会变的很大;

3, 必须手动控制每个页的大小,如内容超出页的大小,则相关内容会消失,这样你必须进和手工的分页处理;

4, 如有文字在 Table 的前后,相互间的间隔一样会不易控制。

 

        以上问题很是麻烦,花费近一天时间仍没有解决。:(

 

       上面的方法用很简单的CSS 完成的处理,但有上面提到的几个问题,所以只能应用于一些简单的页面。而不适合对复杂页面的横向打印。

 

        经过一段时间的查找,终于发现一种方法,但却必须使用 "WScript.Shell" 对象才能实现。具体例子如下(其中还可以实现不打印指定的按钮或控件,使用Style 实现):

 

<HTML><HEAD><TITLE>Print</TITLE>
<!--media=print 这个属性说明可以在打印时有效-->
<!--希望打印时不显示的内容设置class="Noprint"样式-->
<!--希望人为设置分页的位置设置class="PageNext"样式-->
<style media="print">
<!--
.Noprint{display:none;}
.PageNext{page-break-after:always;}
-->
</style>

<script language="JavaScript">
DA = (document.all) ? 1 : 0

shell = new ActiveXObject("WScript.Shell");
setTimeout("shell.sendKeys('%fu')",1000); //works same as alt+F+U
setTimeout("shell.sendKeys('A')",1100); //to set the size as A4 press a 2 times
setTimeout("shell.sendKeys('A')",1200);
setTimeout("shell.sendKeys('%a')",1200); // Orientation: Select "Landscape"
setTimeout("shell.sendKeys('{ENTER}')",1300);


function winPrintDialogBox()
{
window.print(); //then call window.print()
}
function HandleError()
{
alert("/nNothing was printed. /n/nIf you do want to print this page, then/nclick on the printer icon in the toolbar above.")
return true;
}
</script>


<script language="VBScript">

Sub window_onunload()
On Error Resume Next
 Set WB = nothing
On Error Goto 0
End Sub

Sub Print()
OLECMDID_PRINT = 6
OLECMDEXECOPT_DONTPROMPTUSER = 2
OLECMDEXECOPT_PROMPTUSER = 1


On Error Resume Next

If DA Then
call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)

Else
call WB.IOleCommandTarget.Exec(OLECMDID_PRINT ,OLECMDEXECOPT_DONTPROMPTUSER,"","","")

End If

If Err.Number <> 0 Then
If DA Then
Alert("Nothing Printed :" & err.number & " : " & err.description)
Else
HandleError()
End if
End If
On Error Goto 0
End Sub

If DA Then
wbvers="8856F961-340A-11D0-A96B-00C04FD705A2"
Else
wbvers="EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B"
End If

document.write "<object ID=""WB"" WIDTH=0 HEIGHT=0 CLASSID=""CLSID:"
document.write wbvers & """> </object>"
</script>


</HEAD>

<BODY>
<INPUT class="Noprint" style="WIDTH: 100px; HEIGHT: 30px" οnclick=onClick=window.print() type=button align=right value=Print>

<Pre> This is a testing page for Landscape print.</Pre>
</BODY</HTML>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值