基于Web的打印方案比较分析(二)使用IE的打印功能进行一般的网页打印

2019-03-28 11:59|来源: 道长A

  在我们进行web开发的时候,通常会需要用到打印,然而,由于web技术的限制及考虑到安全的问题,一直以来,web打印的功能都是非常弱的,对此,我们也只能接受。也许你在开发过程中经常会遇见客户对你说,“你们系统的打印太差了,你看看excel的打印多好啊,”,面对这样的用户,我们除了苦笑,还能说什么呢?如果你对着他们去解释什么是BS架构,什么是CS架构,不但不能够解决问题,反而会招致用户的反感。

  那么,我们是不是就什么都不能做了呢?答案当然是否定的。利用现有的web技术,再加上针对求的灵活实现,我们也可以做出漂亮的打印出来。

  在接下来的几篇文章里,我将分别介绍几种打印的方法或技术。这些方法有的很简单,有的稍微复杂一点。我们还是从基础做起,先了解最简单的打印技术,然后再一步一步提高,这样也有利于消化技术。

  本篇内容讲述利用IE提供的简单的打印功能,进行打印的设置以及打印。

  在IE里打印,我们可以通过javascript来调用window.print()函数实现。下面是一个简单的代码示例。

   type='button' value='打印' onclick='javascript:window.print()'/> 

  
  点击“打印”后,即可弹出打印窗口,如下图

通过这个函数,可以实现最简单的打印功能。如果我们要对纸张,页边距进行设置,那该怎么做呢? 我们知道,我们可以方便地通过 Internet Explorer 用户界面更改页边距、页眉和页脚设置和默认 Internet Explorer 打印机,IE也提供了一个叫WebBrowser 控件来供我们调用,通过调用,可以在页面上调出打印的设置窗口,在设置窗口里,用户可以更改页边距、页眉和页脚设置等。(但是,在 Internet Explorer 或 WebBrowser 控件下没有以编程方式更改这些设置的方法。在本系列教程的第三篇,我将介绍如何在页面上通过编程的方式来更改设置。)我们可以在页面上输入如下代码来调用WebBrowser 控件。

<OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" id=wb name=wb></OBJECT>
<input type='button' value='打印' onclick='javascript:wb.ExecWB(6,1)'/>      
  
<input type='button' value='打印预览' onclick='javascript:wb.ExecWB(7,1)'/>      
<input type='button' value='页面设置' onclick='javascript:wb.ExecWB(8,1)'/>

上例中的OBJECT就是IE提供的打印控件,叫WebBrowser,我们在网页中可以用我们设置的id或name来引用它。

  这个对象有很用法,其中涉及到打印的有下面三项。

  wb.ExecWB(6,1) 打印

  wb.ExecWB(7,1) 打印预览

  wb.ExecWB(8,1) 打印页面设置

  点击“打印”按钮,即可弹出和window.print()函数一样的窗口。 点击打印预览,即可预览当前页面。


点击“页面设置”,即可弹出页面设置窗口,在设置窗口里,可以对边距,页眉等进行详细设置。

通过以上三个功能,我们就可以进行简单的打印和设置了,对于一般的打印需求来说基本足够。

  这里需要说明的是,“页面设置”中的各个值,是存储在用户的注册表中。

  下面是 Microsoft Internet Explorer 访问打印设置的方式:

  对于页边距,Microsoft Internet Explorer 首先尝试从以下注册表项中获取值:

  HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerPageSetup

   
  如果没有此项,Internet Explorer 将通过从以下注册表项中复制值来创建此项:

  HKEY_LOCAL_MACHINESoftwareMicrosoftInternet ExplorerPageSetup   

  如果没有此项,将提供默认值。

  对于页眉和页脚,将从以下项中获取值:

  HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerPageSetup


如果没有此项,将提供默认值。

  页边距的默认值是 0.75,

  对于 Internet Explorer 默认打印机,默认值将从以下项提供:    

  HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerPageSetupprinter  


请注意,这些值作用于整个系统,影响着当前用户的 WebBrowser 控件和 Internet Explorer 的所有实例。因此,如果你设置了第一张网页的页眉是“AJava.org”,那么第二张网页的页眉也是它。

  那么,有没有一种办法,能够在程序里对这些选项进行设置,而不需要用户每次都手工来设置呢?请看下面.

本文链接:领悟书生教程网

相关问答

更多

我的网页只打印到1页(没有休息)(My web page only prints onto 1 page (there is no break))

您需要一个打印样式表,它的高度应设置为“auto”,并且溢出设置为“可见”。 我做的是这样的: @media print { html, body { height: auto; overflow: visible; } } 只需将它放在主CSS文件或自己的文件中。 You need a print stylesheet, and it should have height set to "auto" and overflow set to "visible" for the body. ...

打印从网页中选择的数据(print Selected data from web page)

如下例所示: <html> <head> <style type="text/css" media="print"> @media print { #non-printable { display: none; } #printable { display: block; width: 100%; height: 100%; } } </style> </head> <body> ...

Python中是否有任何智能打印方法?(Are there any smart print methods in Python?)

>>> a = [2,2,2,1,1,1,1,1,1,1] >>> from itertools import groupby >>> ["{}*{}".format(k, sum(1 for x in g)) for k, g in groupby(a)] ['2*3', '1*7'] 或者为了代码重用的利益: >>> def rle(seq): ... return ((k, sum(1 for x in g)) for k, g in groupby(seq)) ... ...

如何反思地打印方法体?(How do I print the method body reflectively?)

如何添加Java的反射本质以打印方法体? 恐怕相当困难。 首先,原始源代码很可能对正在运行的程序不可用。 通常,开发人员不在二进制JAR中包含源代码。 (即使他们这样做,也不能保证他们会成为“真正的”来源。) 通常可以通过将类的FQN转换为字节码文件并使用classes classloader将文件作为资源流加载来获取类的字节码。 但不能保证你以这种方式获得的字节码将与加载的字节码相同。 (有些类加载器出于各种原因与字节码混淆。) 假设你可以得到真正的字节码,最后一步是将它们显示为raw,或者反汇 ...

适合打印的网页(Printer Friendly Web Page)

你说你把线改成了media="print" ......我认为你在页面上没有media="screen"样式表了吗? 此外,您正在查看Firebug中的页面,样式已经消失了? 你似乎对你所做的事情有一些误解...... <link rel="stylesheet" type="text/css" href="screen.css" media="screen"/> 表示“只要在屏幕上显示此文档, 就使用样式表screen.css 。 <link rel="stylesheet" type="te ...

从网页打印信封(Printing an envelope from a web page)

我认为底线最好使用PDF。 可悲的是,浏览器非常喜欢打印。 有没有办法指定用户打印网页时要使用的媒体类型/页面大小? 您可以指定CSS样式表以仅应用于使用media="print" 。 至于页面大小,没有可靠的方法来指定它。 您将不得不依赖用户为您执行此操作。 此外,您必须依赖用户删除大多数浏览器添加到打印结果的页眉和页脚。 另外,我可以布置文本以便在特定位置打印吗? 从理论上讲,是的。 您可以使用cm或in物理单位值来定位页面上的元素。 我不确定这些是否可以100%可靠地工作,因为打印机特定的边 ...

打印网页上的所有输入(Print all input from web page)

你为什么不用urllib2 + BeautifulSoup : import urllib2 from bs4 import BeautifulSoup url = "http://sito.com/SitoContact.htm" # change to whatever your url is page = urllib2.urlopen(url).read() soup = BeautifulSoup(page) for i in soup.find_all('input'): ...

从R内打印网页(Print a web page from within R)

您可以调用名为wkhtmltopdf的命令行工具,它既是开源的又是跨平台的: shell("C:\\wkhtmltopdf\\bin\\wkhtmltopdf http://stackoverflow.com so.pdf") 别忘了逃避反斜杠! You can invoke a command line tool called wkhtmltopdf, which is both open source and cross-platform: shell("C:\\wkhtmltopdf\\b ...

如何使用JavaScript打印方法?(How can I have a Print Method, Using JavaScript)

这应该很简单: <button onclick="window.print()">Print</button> This should be as simple as: <button onclick="window.print()">Print</button>

网页打印按钮和设置(web page print button and settings)

出于安全原因,您的JavaScript无法访问打印设置页面。 For security reasons your JavaScript would not have have access to the print setup page.