相信很多朋友在Windows界面中使用过WebBrowser控件,这让我们可以很方便的访问页面中的任何元素。可能也有很多人用过一个第三方的打印控件ScriptX(可以在http://www.meadroid.com/scriptx/下载),用来页面打印很方便。下面是一个例子,主页面上有一个按钮“打印”,点击后直接打印一个页面。主页面<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<SCRIPT language=JavaScript>function btnPrt()
{
  with(factory.printing){
        header = "";
        footer = "";
        portrait = true;
        leftMargin = 0;
        topMargin = 0;
        rightMargin = 0;
        bottomMargin = 0;
        alert("是否打印2")
        Print(false, prt_frame);
    }}
</SCRIPT><TITLE></TITLE>
</HEAD>
<BODY>
<IFRAME name=prt_frame src="PrintPage.htm" width=0 height=0></IFRAME>
<object id="factory" viewastext  style="display:none"
  classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
  codebase="http://[your-path]/smsx.cab#Version=6,2,433,70">
</object>
<P>这是主页面</P>
<P>&nbsp;</P>
<P><INPUT type=button value=打印按钮 onclick="btnPrt()"></P></BODY>
</HTML>其中<IFrame></IFrame>指向需要打印的页面,各位可以随便弄个简单的页面,然后把"src"指向打印页面即可。
<object></object>即是注册好的打印组件"ScriptX",可以在前面给得主页上下载并安装,然后在页面里添加这段代码就可以使用了。
Function btnPrt() 就是打印的函数,实际上是调用了ScriptX中的方法。由“打印”按钮触发这个JScript事件OK, 以上解释就到这里。经过这样的代码添加后,我们点击主页面中 “打印”按钮,就可以自动打印<IFrame>指向的页面了。因为我们在调用Print的时候用了False参数,所以可以直接用默认打印机打印出来。当然这些是直接用IE打开的时候完全正常,但是从WebBrowser空间中去加载这个页面,就是打印不出来。大家看我加了一个alert语句,从webbrowser加载页面时,可以触发这个事件,可以运行到alert的地方,可是它就是到Print的地方会报错~~~~~~~~~~~~~~我看msdn上本来就说webbrowser对打印功能支持的不好,可是真的没有办法解决吗?希望大家能来讨论一下

解决方案 »

  1.   

    ScriptX本身就是一个打印插件。
      

  2.   

    我做的一个项目也涉及到WebBrowser打印,当时也参考过ScriptX控件,后来并没有采用。楼主使用ScriptX控件的目的好像是要重新设置打印的页眉、页脚和页面边距,我的解决办法是直接在打印之前更改注册表,打印完毕之后再恢复注册表。我估计ScriptX控件也是通过更新注册表进行打印。我现在还碰到的一个难题就是打印反向的控制,不知道ScriptX控件是否可以控制?WebBrowser对打印支持实在有限,只提供了一个函数,不过后面的两个Param,研究了很久,一直不知道怎么用。
      

  3.   

    再换个方式问问题。上回说到用webbrowser加载主页面后,点击“打印”按钮,报错。那是否有可能是打印控件没有被正确的加载。如果用程序去手动加载的话应该怎样做呢?
      

  4.   

    http://www.wave12.com/web/SigCon.asp?bCate=50&sCateName=%B9%A6%C4%DC%BD%E9%C9%DC&ID=173&CateName=wsReport4.5