﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-web打印，web打印控件，dotnet web打印控件，java web打印控件，webprint-文章分类-关于web打印</title><link>http://www.cnitblog.com/eprint01/category/3818.html</link><description>web打印，web打印控件，dotnet web打印控件，java web打印控件，webprint</description><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 04:04:57 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 04:04:57 GMT</pubDate><ttl>60</ttl><item><title>web打印参数设置的小插件，类似国外的Scriptx</title><link>http://www.cnitblog.com/eprint01/articles/16823.html</link><dc:creator>web打印解决方案</dc:creator><author>web打印解决方案</author><pubDate>Thu, 14 Sep 2006 01:35:00 GMT</pubDate><guid>http://www.cnitblog.com/eprint01/articles/16823.html</guid><wfw:comment>http://www.cnitblog.com/eprint01/comments/16823.html</wfw:comment><comments>http://www.cnitblog.com/eprint01/articles/16823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eprint01/comments/commentRss/16823.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eprint01/services/trackbacks/16823.html</trackback:ping><description><![CDATA[打印参数设置的小插件<br /><br />eprint插件3.0是在vc7.0上开发的ATL小控件（只有70k）,运行时不可视。主要实现对IE浏览器中文档打印格式的控制，可以定制打印纸型，纸张来源，打印方向等等用户经常关心的属性。<br /> <br />用户通过代码可以自定义纸张，打印方向，页边距等等属性达到定制打印的目的，这些定制属性的设置不会改变IE浏览器的默认打印机属性。也可以通过服务器端的页面调用eprint插件生成客户端的页面达到设置打印参数的目的。<br /><br />有感兴趣的可以加我的msn:eprint01@hotmail.com<br />详细文档及在线演示：<a href="http://www.fcsoft.com.cn/ePrint.htm"><font color="#000000">www.fcsoft.com.cn/ePrint.htm</font></a><img src ="http://www.cnitblog.com/eprint01/aggbug/16823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eprint01/" target="_blank">web打印解决方案</a> 2006-09-14 09:35 <a href="http://www.cnitblog.com/eprint01/articles/16823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web打印控制技术的几种方案(转)</title><link>http://www.cnitblog.com/eprint01/articles/16821.html</link><dc:creator>web打印解决方案</dc:creator><author>web打印解决方案</author><pubDate>Thu, 14 Sep 2006 01:24:00 GMT</pubDate><guid>http://www.cnitblog.com/eprint01/articles/16821.html</guid><wfw:comment>http://www.cnitblog.com/eprint01/comments/16821.html</wfw:comment><comments>http://www.cnitblog.com/eprint01/articles/16821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eprint01/comments/commentRss/16821.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eprint01/services/trackbacks/16821.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">Web打印控制技术的几种方案(转)</span>
				<br />
				<br />
		</strong>
		<span class="tpc_content">
				<p>　做Web开发的人员一定都会面临一个共同的难题，那就是打印。的确，相对于Windows桌面应用程序来讲，Web应用程序的打印有种种限制，技术人员在项目开发过程中经常会遇到用户这样或那样的需求. 做过桌面应用开发的人都会非常熟悉水晶报表、Active Report之类的报表控件，它们不仅有简单灵活的设计界面，更具有非常强大的报表功能，能满足各种报表的打印需求。而Web应用则因为其特殊的呈现方式，只能寻求其他的解决方案。现在我们来分析一下目前已经成形的Web打印方案： </p>
				<p>　　现有的Web打印控制技术分成几种方案： </p>
				<p>　　一．自定义控件完成打印 </p>
				<p>　　利用IE 自带的WebBrowser 控件实现打印 </p>
				<p>　　利用第三方控件实现打印 </p>
				<p>　　1、自定义控件方式 </p>
				<p>　　自定义控件方式就是利用VB 或VC 等工具生成COM 组件，用定义好的打印格式来分析打印源文件从而实现打印。只有将生成的组件下载并注册到客户机上，才能实现在客户端的 </p>
				<p>打印。 </p>
				<p>　　难点主要是定义打印格式、如何来分析打印源文件。现有的比较好的方法是利用XML 技术来全面的解决问题，利用XML 可以非常容易地定义打印目标的文本、表格等内容的格式。 </p>
				<p>但对程序员的开发要求高，难度比较大。 </p>
				<p>　　2、利用WebBrowser 实现Web打印 </p>
				<p>　　WebBrowser是IE 内置的浏览器控件，无需用户下载。本文档所讨论的是有关IE6.0 版本 的WebBrowser 控件技术内容。与其相关的技术要求有：打印文档的生成、页面设置、打印操作的实现等几个环节。 </p>
				<p>　　（一）、打印文档的生成 </p>
				<p>　　1、客户端脚本方式 </p>
				<p>　　客户端脚本分为VBScript、java script、JScript 几种脚本语言。在IE 下开发应用使用的语法为JScript 的语法，由于它和java script 几乎没有什么区别，所以也可以称其为java script（下面简写为JS）。一般情况下，主要使用JS 来实现DOM 文档的分析，DOM 为微软提出的一种Web文档模型，主要用来实现Web脚本编程。 </p>
				<p>　　利用JS 可以分析源页面的内容，将欲打印的页面元素提取出来，实现打印。通过分析源文档的内容，可以生成打印目标文档。 </p>
				<p>　　优点：客户端独立完成打印目标文档的生成，减轻服务器负荷； </p>
				<p>　　缺点：源文档的分析操作复杂，并且源文档中的打印内容要有约定； </p>
				<p>　　2、服务器端程序方式 </p>
				<p>　　服务器端程序方式，主要是利用后台代码从数据库中读取打印源，生成打印目标文档。当的页面生成时，还应适当考虑使用CSS 来实现强制分页控制。 </p>
				<p>　　优点：可以生成内容非常的丰富的打印目标文档，目标文档的内容的可控性强。由于打印内容是从数据库中获取的，所以生成操作相对简单； </p>
				<p>　　缺点：服务器端负载比较大； </p>
				<p>　　（二）、页面设置 </p>
				<p>　　页面设置主要是指设置打印文档的页边距、页眉、页脚、纸张等内容。页面设置将直接影响到打印文档版面的生成效果，所以它和打印文档的生成有着密切的关系。比如：表格的 </p>
				<p>行数、大小、位置、字体的大小等。 </p>
				<p>　　现有的技术是利用IE6.0 内置的打印模板方式来控制页面设置，其可以对打印目标文档产生非常大的影响。打印模板可以控制页边距、页眉、页脚、奇偶页等内容，并可以将用户的设置取得，还可以将设置发送到服务器端。 </p>
				<p>　　打印模板技术可以自定预览窗口和打印格式，最大限度地影响目标文档和打印效果。 </p>
				<p>　　（三）、打印操作的实现 </p>
				<p>　　此功能的实现主要是利用WebBrowser控件的函数接口来实现打印、打印预览（默认的）、 </p>
				<p>　　页面设置（默认的）。 </p>
				<p>&lt;object ID='WebBrowser1' WIDTH=0 HEIGHT=0 </p>
				<p>CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'&gt; </p>
				<p>//打印 </p>
				<p>WebBrowser1.ExecWB(6,1); </p>
				<p>//打印设置 </p>
				<p>WebBrowser1.ExecWB(8,1); </p>
				<p>//打印预览 </p>
				<p>WebBrowser1.ExecWB(7,1); </p>
				<p>3、一个实例项目采用的打印方案 </p>
				<p>服务器端程序方式、打印预览接口调用，下面为例， 主要参考项目中的： </p>
				<p>pageErrorPrint.aspx.vb 文件 </p>
				<p>主调用页 </p>
				<p>function PrintPage(iPageIndex,strQuery) </p>
				<p>{ </p>
				<p>var strURL; </p>
				<p>strURL = "PageErrorPrint.aspx?PageIndex=" + iPageIndex + "&amp;QueryString=" + </p>
				<p>strQuery; </p>
				<p>winPrint=window.open(strURL,"","left=2000,top=2000,fullscreen=3"); </p>
				<p>} </p>
				<p>打印页HTML 源中的预览控制 </p>
				<p>&lt;SCRIPT language="java script"&gt; </p>
				<p>document.write("&lt;object ID='WebBrowser' WIDTH=0 HEIGHT=0 </p>
				<p>CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'&gt;&lt;/object&gt;"); </p>
				<p>WebBrowser.ExecWB(7,1); </p>
				<p>window.opener=null; </p>
				<p>window.close(); </p>
				<p>&lt;/SCRIPT&gt; </p>
				<p>程序头 </p>
				<p>'首先声明表格容器 </p>
				<p>Protected WithEvents phContainer As System.Web.UI.WebControls.PlaceHolder </p>
				<p>'每个表格中的记录数量 </p>
				<p>Private Const ItemPerTable As Integer = 20 </p>
				<p>关键的实现部分 </p>
				<p>'创建一个符合打印要求的表格 </p>
				<p>tabPagePrint = NewPrintTable() </p>
				<p>'将表头添加到此表格中 </p>
				<p>Call AddTableTitle(tabPagePrint) </p>
				<p>'初始化记录器 </p>
				<p>i = 0 </p>
				<p>iItemIndex = iStartPoint </p>
				<p>For Each clsItem In clsAllData.ErrorCollection </p>
				<p>If i &gt; 0 And i Mod ItemPerTable = 0 Then </p>
				<p>'添加表格控件到页面中 </p>
				<p>phContainer.Controls.Add(tabPagePrint) </p>
				<p>'在页面中添加一个换行符 </p>
				<p>Call AddPageBreak() </p>
				<p>'创建新一轮的表格 </p>
				<p>tabPagePrint = NewPrintTable() </p>
				<p>Call AddTableTitle(tabPagePrint) </p>
				<p>End If </p>
				<p>'将记录添加到表格中 </p>
				<p>Call AddItemToTable(iItemIndex, tabPagePrint, clsItem) </p>
				<p>iItemIndex = iItemIndex + 1 </p>
				<p>i = i + 1 </p>
				<p>Next </p>
				<p>'添加表格控件到页面中 </p>
				<p>phContainer.Controls.Add(tabPagePrint) </p>
				<p>支持函数 </p>
				<p>'功能:添加页的换行符 </p>
				<p>Private Sub AddPageBreak() </p>
				<p>Dim ltBreak As LiteralControl </p>
				<p>ltBreak = New LiteralControl("&lt;p style='page-break-before:always'&gt;") </p>
				<p>phContainer.Controls.Add(ltBreak) </p>
				<p>End Sub </p>
				<p>　　二、利用IE自身打印 </p>
				<p>　　这种方式比较简单，也常用的打印方式，只需要将报表页面设计好，用户通过IE菜单中的打印功能完成打印。优点是简单，容易实现，缺点是不灵活，不能控制分页，不能控制好页眉和页脚。 </p>
				<p>　　三、将报表导出成Word,Excel或PDF形式打印 </p>
				<p>　　这种方式需要将页面导出成Office文档或pdf,最低的要求是客户端已经安装用以打开Word、Excel或Pdf文档的软件。这种方式可以通过水晶报表组件或其他一些第三方控件非常容易地实现。导出成Pdf形式后打印质量和效果都很好，导出成Word或Excel后用户可以自定义打印的内容和格式。 </p>
				<p>　　总之，现有的打印方案各有所长，在开发过程中应根据用户的需求作选择，利用IE打印简单，容易实现，在用户需求简单或打印内容较少的情况下采用此方案比较适宜。利用自定义控件打印可以实现完全自定义，但需要较高的技术要求和开发周期。利用导出的方式则可以满足用户需要一点自定义或打印内容有多页的需求。</p>
				<p>-------------------------------------------------------------</p>
				<p>1、控制"纵打"、横打”和“页面的边距。  </p>
				<p>（1）&lt;script defer&gt;  </p>
				<p>function SetPrintSettings() {  </p>
				<p>　// -- advanced features  </p>
				<p>　factory.printing.SetMarginMeasure(2) // measure margins in inches  </p>
				<p>　factory.SetPageRange(false, 1, 3) // need pages from 1 to 3  </p>
				<p>　factory.printing.printer = "HP DeskJet 870C"  </p>
				<p>　factory.printing.copies = 2  </p>
				<p>　factory.printing.collate = true  </p>
				<p>　factory.printing.paperSize = "A4"  </p>
				<p>　factory.printing.paperSource = "Manual feed"  </p>
				<p>　// -- basic features  </p>
				<p>　factory.printing.header = "This is MeadCo"  </p>
				<p>　factory.printing.footer = "Advanced Printing by ScriptX"  </p>
				<p>　factory.printing.portrait = false  </p>
				<p>　factory.printing.leftMargin = 1.0  </p>
				<p>　factory.printing.topMargin = 1.0  </p>
				<p>　factory.printing.rightMargin = 1.0  </p>
				<p>　factory.printing.bottomMargin = 1.0  </p>
				<p>}  </p>
				<p>&lt;/script&gt;  </p>
				<p>（2）  </p>
				<p>&lt;script language="java script"&gt;  </p>
				<p>　　function printsetup(){  </p>
				<p>　　// 打印页面设置  </p>
				<p>　　wb.execwb(8,1);  </p>
				<p>　　}  </p>
				<p>　　function printpreview(){  </p>
				<p>　　// 打印页面预览  </p>
				<p>　　　　  </p>
				<p>　　wb.execwb(7,1);  </p>
				<p>　　　　　  </p>
				<p>　　　　  </p>
				<p>　　}  </p>
				<p>　　function printit()  </p>
				<p>　　{  </p>
				<p>　　if (confirm('确定打印吗？')) {  </p>
				<p>　　wb.execwb(6,6)  </p>
				<p>　　}  </p>
				<p>　　}  </p>
				<p>　　&lt;/script&gt;  </p>
				<p>&lt;/head&gt;  </p>
				<p>&lt;body&gt;  </p>
				<p>&lt;OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"  </p>
				<p>height=0 id=wb name=wb width=0&gt;&lt;/OBJECT&gt;  </p>
				<p>&lt;input type=button name=button_print value="打印"  </p>
				<p>onclick="java script:printit()"&gt;  </p>
				<p>&lt;input type=button　name=button_setup value="打印页面设置"  </p>
				<p>onclick="java script:printsetup();"&gt;  </p>
				<p>&lt;input type=button　name=button_show value="打印预览"  </p>
				<p>onclick="java script:printpreview();"&gt;  </p>
				<p>&lt;input type=button name=button_fh value="关闭"  </p>
				<p>onclick="java script:window.close();"&gt;  </p>
				<p>------------------------------------------------  </p>
				<p>关于这个组件还有其他的用法，列举如下：  </p>
				<p>WebBrowser.ExecWB(1,1) 打开  </p>
				<p>Web.ExecWB(2,1) 关闭现在所有的IE窗口，并打开一个新窗口  </p>
				<p>Web.ExecWB(4,1) 保存网页  </p>
				<p>Web.ExecWB(6,1) 打印  </p>
				<p>Web.ExecWB(7,1) 打印预览  </p>
				<p>Web.ExecWB(8,1) 打印页面设置  </p>
				<p>Web.ExecWB(10,1) 查看页面属性  </p>
				<p>Web.ExecWB(15,1) 好像是撤销，有待确认  </p>
				<p>Web.ExecWB(17,1) 全选  </p>
				<p>Web.ExecWB(22,1) 刷新  </p>
				<p>Web.ExecWB(45,1) 关闭窗体无提示  </p>
				<p>2、分页打印  </p>
				<p>&lt;HTML&gt;  </p>
				<p>&lt;HEAD&gt;  </p>
				<p>&lt;STYLE&gt;　　  </p>
				<p>　　P {page-break-after: always}  </p>
				<p>&lt;/STYLE&gt;  </p>
				<p>&lt;/HEAD&gt;  </p>
				<p>&lt;BODY&gt;  </p>
				<p>&lt;%while not rs.eof%&gt;  </p>
				<p>&lt;P&gt;&lt;%=rs(0)%&gt;&lt;/P&gt;  </p>
				<p>&lt;%rs.movenext%&gt;  </p>
				<p>&lt;%wend%&gt;  </p>
				<p>&lt;/BODY&gt;  </p>
				<p>&lt;/HTML&gt;  </p>
				<p>3、ASP页面打印时如何去掉页面底部的路径和顶端的页码编号  </p>
				<p>（1）ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉，打印就不出来了。  </p>
				<p>（2）&lt;HTML&gt;  </p>
				<p>&lt;HEAD&gt;  </p>
				<p>&lt;TITLE&gt; New Document &lt;/TITLE&gt;  </p>
				<p>&lt;META NAME="Generator" CONTENT="EditPlus"&gt;  </p>
				<p>&lt;META NAME="Author" CONTENT="YC"&gt;  </p>
				<p>&lt;script language="VBScript"&gt;  </p>
				<p>dim hkey_root,hkey_path,hkey_key  </p>
				<p>hkey_root="HKEY_CURRENT_USER"  </p>
				<p>hkey_path="\Software\Microsoft\Internet Explorer\PageSetup"  </p>
				<p>'//设置网页打印的页眉页脚为空  </p>
				<p>function pagesetup_null()  </p>
				<p>　　on error resume next  </p>
				<p>　　Set RegWsh = CreateObject("WScript.Shell")  </p>
				<p>　　hkey_key="\header"　　  </p>
				<p>　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""  </p>
				<p>　　hkey_key="\footer"  </p>
				<p>　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""  </p>
				<p>end function  </p>
				<p>'//设置网页打印的页眉页脚为默认值  </p>
				<p>function pagesetup_default()  </p>
				<p>　　on error resume next  </p>
				<p>　　Set RegWsh = CreateObject("WScript.Shell")  </p>
				<p>　　hkey_key="\header"　　  </p>
				<p>　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&amp;w&amp;b页码，&amp;p/&amp;P"  </p>
				<p>　　hkey_key="\footer"  </p>
				<p>　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&amp;u&amp;b&amp;d"  </p>
				<p>end function  </p>
				<p>&lt;/script&gt;  </p>
				<p>&lt;/HEAD&gt;  </p>
				<p>&lt;BODY&gt;  </p>
				<p>&lt;br/&gt;  </p>
				<p>&lt;br/&gt;  </p>
				<p>&lt;br/&gt;  </p>
				<p>&lt;br/&gt;  </p>
				<p>&lt;br/&gt;  </p>
				<p>&lt;br/&gt;&lt;p align=center&gt;  </p>
				<p>&lt;input type="button" value="清空页码" onclick=pagesetup_null()&gt; &lt;input type="button" value="恢复页吗" onclick=pagesetup_default()&gt;&lt;br/&gt;  </p>
				<p>&lt;/p&gt;  </p>
				<p>&lt;/BODY&gt;  </p>
				<p>&lt;/HTML&gt;  </p>
				<p>4、浮动帧打印  </p>
				<p>&lt;SCRIPT LANGUAGE=java script&gt;  </p>
				<p>function button1_onclick() {  </p>
				<p>　　var odoc=window.iframe1.document;  </p>
				<p>　　var r=odoc.body.createTextRange();  </p>
				<p>　　var stxt=r.htmlText;  </p>
				<p>　　alert(stxt)  </p>
				<p>　　var pwin=window.open("","print");  </p>
				<p>　　pwin.document.write(stxt);  </p>
				<p>　　pwin.print();  </p>
				<p>}  </p>
				<p>&lt;/SCRIPT&gt;  </p>
				<p>4、用FileSystem组件实现WEB应用中的本地特定打印  </p>
				<p>&lt;script Language=VBScript&gt;  </p>
				<p>function print_onclick //打印函数  </p>
				<p>dim label  </p>
				<p>label=document.printinfo.label.value //获得HTML页面的数据  </p>
				<p>set objfs=CreateObject("Scripting.FileSystemObject") //创建FileSystem组件对象的实例  </p>
				<p>set objprinter=objfs.CreateTextFile ("LPT1:",true) //建立与打印机的连接  </p>
				<p>objprinter.Writeline("__________________________________") //输出打印的内容  </p>
				<p>objprinter.Writeline("| |")  </p>
				<p>objprinter.Writeline("| 您打印的数据是："&amp;label&amp; " |”)  </p>
				<p>objprinter.Writeline("| |")  </p>
				<p>objprinter.Writeline("|_________________________________|")  </p>
				<p>objprinter.close //断开与打印机的连接  </p>
				<p>set objprinter=nothing  </p>
				<p>set objfs=nothing // 关闭FileSystem组件对象  </p>
				<p>end function  </p>
				<p>&lt;/script&gt;  </p>
				<p>服务器端脚本：  </p>
				<p>&lt;%………  </p>
				<p>set conn=server.CreateObject ("adodb.connection")  </p>
				<p>conn.Open "DSN=name;UID=XXXX;PWD=XXXX;"  </p>
				<p>set rs=server.CreateObject("adodb.recordset")  </p>
				<p>rs.Open(“select ……”),conn,1,1  </p>
				<p>……….%&gt; //与数据库进行交互  </p>
				<p>HTML页面编码：  </p>
				<p>&lt;HTML&gt;  </p>
				<p>………  </p>
				<p>&lt;FORM ID=printinfo NAME="printinfo" &gt;  </p>
				<p>&lt;INPUT type="button" value="打印&gt;&gt;" id=print name=print &gt; //调用打印函数  </p>
				<p>&lt;INPUT type=hidden id=text1 name=label value=&lt;%=………%&gt;&gt; //保存服务器端传来的数据  </p>
				<p>………  </p>
				<p>&lt;/HTML&gt; </p>
		</span>
<img src ="http://www.cnitblog.com/eprint01/aggbug/16821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eprint01/" target="_blank">web打印解决方案</a> 2006-09-14 09:24 <a href="http://www.cnitblog.com/eprint01/articles/16821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>下载eprint打印java试用版本</title><link>http://www.cnitblog.com/eprint01/articles/16796.html</link><dc:creator>web打印解决方案</dc:creator><author>web打印解决方案</author><pubDate>Wed, 13 Sep 2006 08:56:00 GMT</pubDate><guid>http://www.cnitblog.com/eprint01/articles/16796.html</guid><wfw:comment>http://www.cnitblog.com/eprint01/comments/16796.html</wfw:comment><comments>http://www.cnitblog.com/eprint01/articles/16796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eprint01/comments/commentRss/16796.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eprint01/services/trackbacks/16796.html</trackback:ping><description><![CDATA[
		<a href="/Files/eprint01/eprint-java演示616.rar">http://www.cnitblog.com/Files/eprint01/eprint-java演示616.rar</a>
		<br />下面这个是演示数据库，将演示数据库文件展开放到eprint\samples目录下面<br /><a href="/Files/eprint01/sample.mdb.rar">http://www.cnitblog.com/Files/eprint01/sample.mdb.rar</a><br /><br /><img src ="http://www.cnitblog.com/eprint01/aggbug/16796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eprint01/" target="_blank">web打印解决方案</a> 2006-09-13 16:56 <a href="http://www.cnitblog.com/eprint01/articles/16796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采用eprint处理web打印之优势</title><link>http://www.cnitblog.com/eprint01/articles/16787.html</link><dc:creator>web打印解决方案</dc:creator><author>web打印解决方案</author><pubDate>Wed, 13 Sep 2006 08:17:00 GMT</pubDate><guid>http://www.cnitblog.com/eprint01/articles/16787.html</guid><wfw:comment>http://www.cnitblog.com/eprint01/comments/16787.html</wfw:comment><comments>http://www.cnitblog.com/eprint01/articles/16787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eprint01/comments/commentRss/16787.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eprint01/services/trackbacks/16787.html</trackback:ping><description><![CDATA[
		<p>1、打印格式设计器是B/S的，不需要安装，可以直接开放到web系统中，供终端的用户使用，操作简便。<br /><br />2、不是纯控件的形式，将所有的打印数据装入控件，然后实现打印。只有打印的参数设置是用小插件来实现，打印数据全部是按web的方式展现，不破坏web系统的整体一致性。<br /><br />3、不象scriptx那样只有打印参数的设置，不能实现精确的分页，没有格式的控制。eprint打印工具能实现精确的分页等等。<br /><br />4、采用数据集做中间层和用户系统集成，屏蔽了后端的复杂性。</p>
		<p>
				<font color="#0000ff">有兴趣添加msn:eprint01@hotmail.com 获得eprint自定义打印的详细信息</font>
		</p>
		<p>
				<font color="#000000">
						<font color="#0000ff">www.fcsoft.com.cn/ePrint.htm页面有eprint自定义工具的详细介绍和在线演示</font>。</font>
		</p>
<img src ="http://www.cnitblog.com/eprint01/aggbug/16787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eprint01/" target="_blank">web打印解决方案</a> 2006-09-13 16:17 <a href="http://www.cnitblog.com/eprint01/articles/16787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几种web打印方案的比较</title><link>http://www.cnitblog.com/eprint01/articles/16786.html</link><dc:creator>web打印解决方案</dc:creator><author>web打印解决方案</author><pubDate>Wed, 13 Sep 2006 08:12:00 GMT</pubDate><guid>http://www.cnitblog.com/eprint01/articles/16786.html</guid><wfw:comment>http://www.cnitblog.com/eprint01/comments/16786.html</wfw:comment><comments>http://www.cnitblog.com/eprint01/articles/16786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eprint01/comments/commentRss/16786.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eprint01/services/trackbacks/16786.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#3366ff">几种web打印方案的比较<br /></font>
		</p>
		<p>打印通常是系统的辅助部分，但是又必须解决，否则项目完成不了。下面来分析分析目前的几种常见的web打印方案。</p>
		<p>
				<br />
				<font color="#3366ff">一、 浏览器的菜单打印功能 <br /></font>这是最简单的，只需点击页面上的打印菜单，但是也是问题最多的，基本上是不能满足用户需要。比如：不能精确分页，有出现打出半行字的风险；改变纸型后打印出的格式和页面显示的格式相差太大；页眉页脚也需要从菜单中去设置，等等等等。这种方案最大的优势就是不需要做任何代码，点击打印就可以了。<br /></p>
		<p>
				<font color="#3366ff"> 二、 window.Print()</font>
		</p>
		<p>这实际上，是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样，不能精确分页，不能设置纸型，套打的问题更加无从谈起，只不过，可以让用户不用去点菜单，直接点击网页中的一个按钮，或一个链接里面调用罢了。 <br />需要指出的是这种方法提供一个打印前和打印后的事件onbeforeprint、onafterprint。可以在打印前的时候重新编辑一些格式，专门送去打印，打印后又处理回来。<br />function window.onbeforeprint()<br />{<br />//将一些不需要打印的隐藏<br />}<br />function window.onafterprint()<br />{<br />//放开隐藏的元素<br />}</p>
		<p>
				<br />事实上，很多用户都是采用这种方式打印，但是这种方式最致命的缺点是不能设置打印参数，比如纸型，页边距，选择打印机等等。 </p>
		<p>
				<font color="#3366ff">三、 导出excel导出pdf文件的打印</font>
				<br />将需要打印的数据导出excel文件或者导出pdf文件，然后打开excel文件或者pdf文件重新打印，用这种方案能实现精确的打印，套打也能实现，但是需要客户端安装excel和adobe软件，操作起来也有些麻烦，并且导出的excel文件可以重新修改编辑，一般用户都会要求系统提供这种导出的方案，也同时需要直接打印的功能，所以个人觉得这种方案也不能很好的解决打印的问题。</p>
		<p>
				<br />
				<font color="#3366ff">四、 纯ActiveX控件</font>
				<br />这种方案其实就是编写一个C/S的打印控件，然后嵌入到页面里面，将要打印的数据装入到控件中，然后打印。这种方案的优点是打印精度高，分页，设置打印参数等等都能实现。但是缺点也是很明显的，嵌入ActiveX控件破坏了web应用的整体html风格，且这样的控件通常都比较大，一般都超过1M，下载很慢。</p>
		<p>
				<font color="#3366ff">五、 Applet方式</font>
				<br />采用Applet方式，分页或精确打印，都可以做到完美，但缺点也很明显，表现在： <br />安装Applet成本巨大。需要下载十几M的文件。 <br />Applet本身可能并不大，但运行Applet所需的jre一般至少10几M（jre1.4.2 ， 15.45M）。用户需要极大的耐心，来进行打印。 <br />打印报表时，需要重新向服务器检索数据，效率低。 <br />因为Applet方案，一般采用html方式呈现数据，打印时Applet必须向服务器检索同一张票据的数据，看上去，是打印了当前页的票据，实际上，Applet根本不会用当前html页的数据来打印，而是向服务器下载数据到Applet中来打印。也就是说，打印的话，必须两次请求，一次html呈现，一次用来打印。 <br />市场上java类的报表工具，一般推荐Applet方式来实现打印。 <br /><strong> <br /><font color="#3366ff">六、 轻量级的ActiveX插件＋DHTML＋javascript＋后台代码（动态获取数据）</font></strong></p>
		<p>轻量级ActiveX插件：设置打印参数，比如预定义纸型，设置打印方向，打印边距，指定打印机，不弹出打印对话框直接打印等等。</p>
		<p>DHTML＋javascript编辑打印数据的格式展现，实现格式的自定义。</p>
		<p>后台代码，可以是java，dotnet等等的，实现动态获取打印数据。</p>
		<p>这种方案是比较理想的，只需要客户端下载一个很小的打印插件，客户端无需安装任何C/S的格式设计器，就可以轻松实现打印格式的自定义，打印参数的自定义等等。</p>
		<p>eprint自定义打印工具就是这样一种web打印工具。下面是运行这种方案实现格式自定义的一个示例：</p>
		<p>下面是一个预览的界面。</p>
		<p>
				<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/qmei/打印预览.jpg" />
		</p>
		<p>格式设计页面如下：</p>
		<p>
				<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/qmei/打印格式设计器.jpg" />
		</p>
		<p>代码调用如下图：红色圈中的为调用的javascript函数。</p>
		<p>
				<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/qmei/页面调用.jpg" />
				<br />
		</p>
		<p>这种方案的优点是： <br />能设置打印的纸型，方向，边距，页眉页脚等等打印参数。<br />能实现精确打印，分页； <br />格式可以自定义；<br />成本低廉，ActiveX只有70k。 </p>
		<br />
<img src ="http://www.cnitblog.com/eprint01/aggbug/16786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eprint01/" target="_blank">web打印解决方案</a> 2006-09-13 16:12 <a href="http://www.cnitblog.com/eprint01/articles/16786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>