网页的横向打印的三种方案(print your page landscape)

关于网页打印,window.print()提供的功能离远离一般的需求,很多情况下需要编程扩展

目前网上有很多关于网页打印的,但大多采用了ActiveX控件或IE内置的一些Object,由于ActiveX的安全性因素,实用性大打折扣

关于网页的横向打印,确切的说,使用标准JS或CSS方法是不可行的,然而,我们可以根据需求来考虑以下三种方案

方案一:CSS滤镜实现

MS为IE浏览器(5.0以上)提供了一套不错的CSS滤镜,能够实现很多效果(见http://www.cnblogs.com/blodfox777/archive/2008/08/14/1267679.html),我们可以利用它和CSS的打印@media来使页面布局,从而模拟横向打印:

 

ContractedBlock.gifExpandedBlockStart.gifCode
<html>
    
<head>
        
<title>Example</title>
        
<style type="text/css" media="print">
            div.PageBreak
            
{
                page-break-after
:always
            
}

 
            div.page
            
{ 
                writing-mode
: tb-rl;

                height
: 80%;
                margin
: 10% 0%;
            
}
    
            div.page table 
            
{
                margin-right
: 80pt;
                filter
: progid:DXImageTransform.Microsoft.BasicImage(Rotat  ion=1);
            
}
        
</style>
    
</head>
    
<body>
        
<p><h3>Print this!!</h3></p>
        Page one's orientation will be printed in portrait.
        
<!--Page Break--> <div class="PageBreak"> </div> <!--Page Break-->
 
        
<div class="page">
            Page two's orientation will be printed in landscape.
            
<table border="1">
                
<tr><td>A1</td><td>A2</td><td>A3</td><td>A4</td><td>A5</td></tr>
                
<tr><td>B1</td><td>B2</td><td>B3</td><td>B4</td><td>B5</td></tr>
            
</table>
        
</div>
        
<!--Page Break--> <div class="PageBreak"> </div> <!--Page Break-->
 
        Page three's orientation will be printed in portrait.
    
</body>
</html>

 

方案二:替换页面

上面的方法只是模拟,而不能等同于真正的"文件"-->"打印"中设置的横打,而且只能在IE中使用,接下来的方法是通过DHTML4和JS1.2 (IE4以上支持)来实现替换打印,也就是说预先做好另一个专门用来打印的页面B,在打印页面A时,实则打印页面B(甚至可以是B.doc),代码很简单,如下:

这个方案虽然比较麻烦,但应该能够兼容各种浏览器吧

ContractedBlock.gifExpandedBlockStart.gifCode
<link rel=alternate media=print href="printversion.doc">

 

方案三:ActiveX控件

实在不行的话,就使用ActiveX控件吧,由于ActiveX控件安全性、版权、兼容性等原因,我个人不是很喜欢,但一些打印控件,比如ScriptX做的确实非常好,下面有一段ScriptX控制打印的例子:

 

ContractedBlock.gifExpandedBlockStart.gifCode
<script defer> 
function
 SetPrintSettings() { 
// -- advanced features 

factory.printing.SetMarginMeasure(2// measure margins in inches 
factory.SetPageRange(false13// 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>
 

 

 Lance Zhang

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值