asp图片打印
- 格式:doc
- 大小:45.50 KB
- 文档页数:8
(一)登录页面 index.asp<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>用户登录</title></head><body><form id="form1" name="form1" method="post" action="find.asp"><p align="center">用户登录 首次登陆请<a href="login.asp">注册 </a></p><p align="center"><label>用户名<input name="name" type="text" id="name" /></label></p><p align="center"><label>密码<input name="word" type="password" id="word" /></label></p><p align="center"><label><input type="submit" name="Submit3" value="提交" /></label><label><input type="reset" name="Submit4" value="重置" /></label></p><p align="center"> </p></form></body></html>(二)登录页面动作指向的页面 find.asp<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>登陆处理页面</title></head><body><%n1=trim(Request.form("name"))n2=trim(Request.form("word"))if n1="" or n2="" thenresponse.Write("用户名或密码不能为空")response.Write "<p align=center> <a href=index.asp>点击返回</a> </p>"response.Endend ifSet cn=Server.CreateObject("ADODB.Recordset")cn.Open "select * from users where user='"&n1&"' and pwd='"&n2&"'","Driver={Microsoft Access Driver (*.mdb)};Dbq=" &Server.Mappath("s1.mdb")if cn.eof thenresponse.Write("用户名不存在或用户名与密码不匹配")response.Write "<p align=center> <a href=index.asp>点击返回</a> </p>"elseresponse.Write "<p align=center> <a href=index.html>欢迎进入本公司网站</p>"cn.closeset cn=nothingend if%></body></html>(三)用户注册页面 login.asp<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title><style type="text/css"><!--.STYLE1 {font-size: 24px;color: #FF0000;}--></style></head><body><form id="form1" name="form1" method="post" action="main.asp"><div align="center"><table width="300" border="2"><tr><td><div align="center" class="STYLE1">用户注册</div></td></tr></table><table width="300" border="2" cellspacing="0"><tr><td>用户名:</td><td><input name="user" type="text" id="user" /></td></tr><tr><td>密码:</td><td><input name="pwd" type="password" id="pwd" /></td></tr><tr><td>确认密码:</td><td><input name="pwd1" type="password" id="pwd1" /></td></tr><tr><td colspan="2" align="center"> <input type="submit" name="Submit" value="提交" /> <input type="reset" name="Submit2" value="重置" /></td></tr></table><p> </p></div></form></body></html>(四)注册页面指向的动作页面 main.asp<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>注册处理页面</title></head><body><% Set cn1=Server.CreateObject("ADODB.Connection")cn1.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq="& Server.Mappath("s1.mdb")a1=trim(Request.form("user"))a2=trim(Request.form("pwd"))a3=trim(Request.form("pwd1"))Set cm=Server.CreateObject("ADODB.Recordset")cm.Open "select * from users where user='"&a1&"'","Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.Mappath("s1.mdb") if not(cm.eof) thenresponse.Write ("此用户名已被注册,请重新选择")response.Write "<p align=center> <a href=login.asp>点击返回</a> </p>"cm.closeset cm=nothingresponse.Endend ifif a1="" or a2="" or a3="" thenresponse.Write("用户名或密码不能为空")response.Write "<p align=center> <a href=login.asp>点击返回</a> </p>"elseif a2<>a3 thenresponse.Write("两次密码不匹配,请重试")response.Write "<p align=center> <a href=login.asp>点击返回</a> </p>"elseif len(request.Form("pwd"))<6 thenresponse.Write("密码太简单,请输入至少6位的密码")response.Write "<p align=center> <a href=login.asp>点击返回</a> </p>"elsecn2="'"&a1&"','"&a2&"'"cn1.execute( "Insert into users(user,pwd) values ("&cn2&")")cn1.closeresponse.Write("注册成功,感谢您的支持")response.Write "<p align=center> <a href=index.asp>点击登陆</a> </p>"end if%> </body> </html>。
SAP软件的Smartform和ALV如何使用图片介绍1.如何在SMARTFORM中打印图片在使用SmartForms进行打印单据开发时候,经常需要将公司的LOGO、公司印章、管理人员签名等一并打印,而这些打印对象都是图片,需要将这些打印对象上传到SAP服务器中,才能在SmartForms中应用。
如何上传和应用这类图片,下面是具体操作步骤介绍:1 :执行SE78事务码,按如下图操作。
上传的图片一定要是BMP或DIB格式,选择上传图片的路径,填写名字和描述,然后一直执行下去就可以了,执行成功后显示如下。
2. 在SmartForms设计时,在想要加入LOGO的地方,点击右键:创建->图形,然后在名称:ZERPLOGO,即可才打印的Form中打印出公司的LOGO或其它图形、图片。
2.如何在ALV报表中显示图片具体操作步骤:1. 执行OAER事务码,按如下图操作。
Class name:PICTURESClass type : OTObject key:ZALV_LOGO (ALV报表程序通过这识别)2. 填写完成点击执行按钮(或F8)运行之后,打开标准文档类型->双击屏幕,上传本地图片文件至SAP(如下图)然后一直执行下去就可以了,执行成功后显示如下。
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = git_listheaderi_logo = 'ZALV_LOGO'. "LOGO object key 大写上图报表测试代码*&-----------------------------------------------------------------* *& Report ZALVLOGO*&-----------------------------------------------------------------* REPORT ZALVLOGO.TYPE-POOLS: slis.*&-----------------------------------------------------------------* * Data Decalaration*&-----------------------------------------------------------------* DATA: git_spfli TYPE TABLE OF spfli.DATA: g_repid TYPE sy-repid.DATA: git_listheader TYPE slis_t_listheader,gwa_listheader TYPE slis_listheader.*&-----------------------------------------------------------------* * START-OF-SELECTION*&-----------------------------------------------------------------* START-OF-SELECTION.g_repid = sy-repid.SELECT * FROM spfli INTO TABLE git_spfli.PERFORM build_alv_header.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = g_repidi_callback_top_of_page = 'TOP_OF_PAGE'i_structure_name = 'SPFLI'TABLESt_outtab = git_spfli.*&-----------------------------------------------------------------* *& Form BUILD_ALV_HEADER*&-----------------------------------------------------------------* FORM build_alv_header .* Type H is used to display headers i.e. big fontgwa_listheader-typ = 'H'.gwa_listheader-info ='Flight Details'.APPEND gwa_listheader TO git_listheader.CLEAR gwa_listheader.* Type S is used to display key and value pairsgwa_listheader-typ = 'S'.gwa_listheader-key = 'Date :' .CONCATENATE sy-datum+6(2)sy-datum+4(2)sy-datum(4)INTO gwa_listheader-infoSEPARATED BY '/'.APPEND gwa_listheader TO git_listheader.CLEAR gwa_listheader.* Type A is used to display italic fontgwa_listheader-typ = 'A'.gwa_listheader-key = 'Date :' .gwa_listheader-info ='SAP ALV Report'.APPEND gwa_listheader TO git_listheader.CLEAR gwa_listheader.ENDFORM. " BUILD_ALV_HEADER*&-----------------------------------------------------------------* *& Form top_of_page*&-----------------------------------------------------------------* FORM top_of_page.CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = git_listheaderi_logo = 'ZALV_LOGO'. "LOGO object key 大写ENDFORM. "top_of_page。
实现打印的⽅法⼩结⽹络打印概述◆B/S结构导致了Web应⽤程序中打印的特殊性。
◆程序运⾏在浏览器中,打印机在本地,⽽⽂件却可能在服务器上,导致了打印控制不是很灵活。
◆格式如何控制和定制等,是我们开发中可能会⾯对的问题。
打印⽂档的⽣成1、客户端脚本⽅式⼀般情况下,主要使⽤JS可以分析源页⾯的内容,将欲打印的页⾯元素提取出来,实现打印。
通过分析源⽂档的内容,可以⽣成打印⽬标⽂档。
优点:客户端独⽴完成打印⽬标⽂档的⽣成,减轻服务器负荷;缺点:源⽂档的分析操作复杂,并且源⽂档中的打印内容要有约定。
2、服务器端程序⽅式利⽤后台代码从数据库中读取打印源,⽣成打印⽬标⽂档。
当的页⾯⽣成时,还应适当考虑使⽤CSS来实现强制分页控制。
优点:可以⽣成内容⾮常丰富的打印⽬标⽂档,⽬标⽂档的内容的可控性强。
由于打印内容是从数据库中获取的,所以⽣成操作相对简单;缺点:服务器端负载⽐较⼤。
页⾯设置◆页⾯设置主要是指设置打印⽂档的页边距、页眉、页脚、纸张等内容。
页⾯设置将直接影响到打印⽂档版⾯的⽣成效果,所以它和打印⽂档的⽣成有着密切的关系。
⽐如:表格的⾏数、⼤⼩、位置、字体的⼤⼩等。
现有的技术是利⽤IE 6.0内置的打印模板⽅式来控制页⾯设置,其可以对打印⽬标⽂档产⽣⾮常⼤的影响。
打印模板可以控制页边距、页眉、页脚、奇偶页等内容,并可以将⽤户的设置取得,还可以将设置发送到服务器端。
打印模板技术可以⾃定预览窗⼝和打印格式,最⼤限度地影响⽬标⽂档和打印效果。
IE直接打印直接调⽤window.print或者webrower控件的ExecWB⽅法来打印。
优点:⽅便快捷,客户端⽆需任何设置即可。
缺点:打印控制不是很灵活。
如果直接调⽤。
window.print来打印页⾯,页⾯上别的元素也会被打印处理,页头页尾的格式也不好控制。
常⽤⽅法:⼤部分情况会把查询的结果绑定到DataGrid上来,然后打印DataGrid。
这种情况的打印⼀般来说格式⽐较固定简单,确定后基本不会再作更改。
ASP开发必备:WEB打印代码大全这篇文章主要介绍了如何使用ASP控制Web的各种打印效果,它能够控制纵打、横打和页面边距等。
1、控制"纵打"、 "横打"和"页面的边距"。
(1)<script defer>function SetPrintSettings() {// -- advanced featuresfactory.printing.SetMarginMeasure(2) // measure margins in inchesfactory.SetPageRange(false, 1, 3) // need pages from 1 to 3factory.printing.printer = "HP DeskJet 870C"factory.printing.copies = 2factory.printing.collate = truefactory.printing.paperSize = "A4"factory.printing.paperSource = "Manual feed"// -- basic featuresfactory.printing.header = "This is MeadCo"factory.printing.footer = "Advanced Printing by ScriptX"factory.printing.portrait = falsefactory.printing.leftMargin = 1.0factory.printing.topMargin = 1.0factory.printing.rightMargin = 1.0factory.printing.bottomMargin = 1.0}</script>(2)<script language="javascript">function printsetup(){// 打印页面设置wb.execwb(8,1);}function printpreview(){// 打印页面预览wb.execwb(7,1);}function printit(){if (confirm('确定打印吗?')) {wb.execwb(6,6)}}</script></head><body><OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"height=0 id=wb name=wb width=0></OBJECT><input type=button name=button_print value="打印"onclick="javascript:printit()"><input type=button name=button_setup value="打印页面设置"onclick="javascript:printsetup();"><input type=button name=button_show value="打印预览"onclick="javascript:printpreview();"><input type=button name=button_fh value="关闭"onclick="javascript:window.close();">------------------------------------------------关于这个组件还有其他的用法,列举如下:WebBrowser.ExecWB(1,1) 打开Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口Web.ExecWB(4,1) 保存网页Web.ExecWB(6,1) 打印Web.ExecWB(7,1) 打印预览Web.ExecWB(8,1) 打印页面设置Web.ExecWB(10,1) 查看页面属性Web.ExecWB(15,1) 好像是撤销,有待确认Web.ExecWB(17,1) 全选Web.ExecWB(22,1) 刷新Web.ExecWB(45,1) 关闭窗体无提示2、分页打印<HTML><HEAD><STYLE>P {page-break-after: always}</STYLE></HEAD><BODY><%while not rs.eof%><P><%=rs(0)%></P><%rs.movenext%><%wend%></BODY></HTML>3、ASP页面打印时如何去掉页面底部的路径和顶端的页码编号(1)ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉,打印就不出来了。
照片的打印格式照片的打印格式主要有以下几种:1.JPEG格式:这是最常见的照片格式,被广泛支持,几乎所有的设备和软件都可以打开和显示JPEG格式的照片。
JPEG使用有损压缩算法,可以在保留较高图像质量的同时减小文件大小。
2.TIFF格式:TIFF格式是一种与平台无关的文件格式,允许保存的数据也很全面,而且支持多种图像模式,包括CMYK图像、RGB图像、Iab图像、索引彩色图像、灰度图像等,可以包含内嵌路径,支持Apha通道和图层的保存,但不能保存双色调信息。
3.EPS格式:EPS格式的含义为“封装的PostScript格式”。
既然是包装过的,就表示不论带到何种软件里使用,其内容不会因为软件的不同而改变。
所以EPS也是一种独立于软件的文件格式。
EPS格式支持黑白点阵图、灰度、专色、RGB、CMYK、LAB、索引色彩模式,并使用ASCⅡ格式进行存储,可以用文字编辑程序打开它。
与TIFF文件不同,EPS文件支持双色调图像模式,还可以包含路径信息,也可以在图像文件中嵌入加网信息。
4.DCS格式:DCS是桌面分色格式,标准EPS格式的扩充形式,克服了EBS格式不支持专色的缺点。
存储DCS格式时需要选择预览、DCS形式、编码等选项。
预览是头文件的显示颜色,对实际颜色没有影响;对于DCS种类,如果选择单色文件,则只生成一个单独的颜色文件;如果是多文件,则总共生成5个文件,包括1个头文件(.eps)和4个色版文件。
5.AI格式:AI格式是一种流行的矢量图文件格式,由于它可以直接载入AdobePhotoshop而自动转成位图图像,使用时灵活又方便,文件占用空间较小,彩色精确度及稳定性也很优秀,因此被广泛应用于印前排版中。
除了上述格式外,还有许多其他打印格式可供选择。
在选择打印格式时,应考虑图像质量、文件大小、兼容性以及所需的打印效果等因素。
SAP打印输出设置说明1. 简介SAP(Systeme, Anwendungen und Produkte in der Datenverarbeitung)是一套广泛使用的企业资源规划(ERP)软件系统。
在SAP系统中,打印输出设置是一个重要的功能,它允许用户定义打印输出的格式、布局和其他相关设置。
本文档将介绍如何进行SAP打印输出设置,并提供一些常用的设置说明和示例。
2. 打开打印输出设置要打开SAP的打印输出设置,可以按照以下步骤操作:1.登录SAP系统并进入相应的应用程序。
2.在菜单栏中选择“工具”(Tools)。
3.在下拉菜单中选择“打印输出设置”(Print OutputSettings)。
3. 设置输出格式在打印输出设置界面,用户可以设置输出格式、布局和其他相关选项。
3.1 输出格式输出格式决定了打印输出的外观和样式。
在SAP中,有以下几种常见的输出格式:•文本格式(Pln Text):以简单的文本形式输出。
•PDF格式:将输出转换为PDF文件。
•Excel格式:将输出转换为Excel文件。
用户可以根据自己的需求选择合适的输出格式,并在设置界面进行相应配置。
3.2 输出布局输出布局决定了打印输出的排版和页面布局。
在SAP中,有以下几种常见的输出布局配置选项:•横向布局:横向排列打印输出内容。
•纵向布局:纵向排列打印输出内容。
•自定义布局:允许用户自定义页面布局和内容排列顺序。
用户可以根据打印输出内容的特点和要求,选择合适的布局,并在设置界面进行相应配置。
4. 设置其他选项除了输出格式和布局,SAP还提供其他一些重要的设置选项,用户可以根据需要进行相应配置。
4.1 打印机选择用户可以选择将打印输出发送到默认打印机或指定的打印机。
在设置界面中,用户可以查看可用的打印机列表,并选择合适的打印机。
4.2 打印份数用户可以设置输出的打印份数。
在设置界面中,用户可以指定所需的打印份数。
4.3 打印范围用户可以设置输出的打印范围。
SAP SMARTFORMS 凭证连续打印设置操作之三---利用ALV显示,并进行手动选择打印在SAP系统中,凭证经常需要连续打印,如从凭证号100,打印至120;要求系统在打印的时候自动按凭证号进行分页处理。
下面的例子是利用内表传递数据至SMARTFORMS中,并且利用打印程序中的内表循环来实现凭证的自动分页打印处理;而SMARTFORMS的设置则非常的简单,按一张凭证号来进行设置即可。
下面进行具体的操作讲解。
一、打印效果显示,如下图所示:运行报表程序:运行后,出现下面的界面,这时我们就可以选择需要打印的单据号,然后再点击工具栏中的“打印”按钮,即可进行选择性的连续打印,如下图:上面为显示连续打印三张销售凭证,运行后如下图所示:递数据的接口。
定义如下图所示:1、表格接口的数据,如下图所示:2、表格接口表的数据如下图所示:3、全局定义中的数据定义如下图所示:四、SMARTFORMS页和窗口的操作:1、页头显示内容。
下面的操作都只进行截图显示。
如下图所示:2、MAIN主窗口的设置:打印表体的表头显示,如下图所示:表体循环显示:新程序行的设置:统计区域的设置:页尾的设置:五、REPORT 完整代码清单,如下图所示(TCODE:SE38):*&---------------------------------------------------------------------* *& Report ZP_SD_006*&*&---------------------------------------------------------------------* *&*&*&---------------------------------------------------------------------* REPORT zp_sd_007.INCLUDE zp_sd_007_varl.INCLUDE zp_sd_007_form.INCLUDE zp_sd_007_alv.START-OF-SELECTION.PERFORM get_data_alv.PERFORM show_alv TABLES gt_vbak_alv.*&---------------------------------------------------------------------**& 包含 ZP_SD_007_VARL*&---------------------------------------------------------------------* TABLES: vbak.DATA: formname TYPE tdsfname,fm_name TYPE rs38l_fnam,control TYPE ssfctrlop,errtab TYPE tsferror.DATA: BEGIN OF gt_vbak OCCURS 0. "定义内表INCLUDE TYPE zwyvbap.DATA: END OF gt_vbak.DATA: BEGIN OF gt_vbap OCCURS 0, "定义内表 vbeln LIKE vbak-vbeln.DATA: END OF gt_vbap.DATA: p_vbeln TYPE vbak-vbeln.* 定义传递到FORM中的页头数据DATA:vkorg TYPE vbak-vkorg, "销售组织vtweg TYPE vbak-vtweg, "分销渠道vkbur TYPE vbak-vkbur, "销售办事处vkgrp TYPE vbak-vkgrp, "销售组kunnr TYPE vbak-kunnr, "供应商代码name1 TYPE kna1-name1, "供应商名称vbeln TYPE vbak-vbeln, "订单号码audat TYPE vbak-audat. "过账日期* 定义显示在ALV界面上的内表DATA: BEGIN OF gt_vbak_alv OCCURS 0,vkorg TYPE vbak-vkorg, "销售组织vtweg TYPE vbak-vtweg, "分销渠道vkbur TYPE vbak-vkbur, "销售办事处vkgrp TYPE vbak-vkgrp, "销售组kunnr TYPE vbak-kunnr, "供应商代码name1 TYPE kna1-name1, "供应商名称vbeln TYPE vbak-vbeln, "订单号码audat TYPE vbak-audat, "过账日期sele TYPE char1. "定义选中栏,边上的DATA: END OF gt_vbak_alv.SELECTION-SCREEN BEGIN OF BLOCK 100 WITH FRAME TITLE text-001.*PARAMETERS s_vbeln TYPE vbak-vbeln OBLIGATORY.SELECT-OPTIONS: s_vbeln FOR vbak-vbeln DEFAULT '4970' TO '4990'. "定义需要打印的凭证号码SELECTION-SCREEN END OF BLOCK 100.*&---------------------------------------------------------------------**& 包含 ZP_SD_007_FORM*$ 显示在界面上的数据*&---------------------------------------------------------------------*FORM get_data_alv.SELECTvkorgvtwegvkburvkgrpkunnrvbelnaudatINTO CORRESPONDING FIELDS OF TABLE gt_vbak_alvFROM vbakWHERE vbeln IN s_vbeln.ENDFORM. "get_data_alv*&---------------------------------------------------------------------**& Form print_so*&---------------------------------------------------------------------** text 设置打印的程序*----------------------------------------------------------------------*FORM print_so.CLEAR gt_vbap[].* SELECT vbeln INTO CORRESPONDING FIELDS OF TABLE gt_vbap FROM vbak WHERE vbeln IN s_vbeln.* 获取选中的数据,并把选中的数据传递至内表中。
分享使⽤Lodop控件实现Web打印功能Lodop控件可以打印Web页⾯内某个控件的内容,下⾯,还是通过⼀个实例来说明下吧,医院系统有个模块,是院内感染模块,它需要填写各种报卡, 并且填写完以后,要将它打印出来,⽽且打印出来的效果要和纸制的报卡近乎⼀致.额,这个要求就⽐较⾼喽,如图-1所⽰,这是其中⼀张报卡的纸制扫描效果图,我们打印出来的效果要和这个⼏乎⼀样.图-1现在我们来分析⼀下这⾥的打印展⽰类型.类型1:患者姓名,卡⽚编号等,直接取⾃Db栏⽬值,不需要额外加⼯.不过,有的需要增加下划线功能.类型2:出⽣⽇期,需要对⽇期进⾏拆分,增加汉字:年,⽉和⽇类型3:户籍属于,全部复选框,将其中某⼀数据选中类型4:户籍地址,是Db中多个栏⽬拼接⽽成.⽽且都是将数据值替换为显⽰值OK,经过以上的分析,上述这些打印类型是可以通过配置的⽅式实现.新建⼀XML配置⽂件,如图-2所⽰图-2字段说明:字段描述描述itemname打印模板中被替换关键字,同时也是Db表中某列名称itemparename若打印类型是comboitem这种组合⽅式,它⽤来定义包括哪些⼦itemnameprintstyle打印类型,⽬前包括:textbox,dropdownlist,datetime,checkboxlist和comboitem(组合⽅式,即由其他多个字段组合⽽成)printformat打印格式,⽇期型的输出格式在此处定义bottomline是否对⽂字增加下划线datasource下拉菜单等的数据源,专门测试使⽤然后我们看看打印模板⽂件是如何制作的,如图-3所⽰图-3现在,我们就要通过编码的⽅式来实现将这些关键字替换掉,简单说,是根据不同的打印格式分别处理.⽐较核⼼的代码如图-4所⽰图-4经过上述代码的编写,我们看看最终的效果图,如图-5所⽰图-5打印控件本⾝⾮常强⼤,可以连续打印.在我提供的⽰例⽂件中,已经提供代码实现⽅式.⼤家可以直接参考.再说明⼀点,这个控件,是在客户端需要安装的.好了,有什么问题欢迎留⾔!⽰例代码。
之Web打印-终极解决篇做过bs开发的同志应该都深有体会,在web程序中打印不再象应⽤程序中那样便于控制了,web程序天⽣的⼀些特性造成了这个缺点,如:打印机在本地,⽽⽂件确可能在服务器上;格式如何控制和定制等等。
都给我们开发中带来了很多问题,虽说有⽔晶报表等控件来解决但总归是不⽅便。
当然有了问题就会有⼈来研究解决,这⾥我先对⽬前流⾏的⼏种⽅式做个简单介绍:1、IE直接打印这个不⽤多说,直接调⽤window.print或者webrower控件的ExecWB⽅法来打印。
⽅便快捷,客户端⽆需任何设置即可。
利⽤⼀些办法也可以实现简单的定制,⽐如做⼀个模板htm⽂件,然后在js中动态创建⼀个隐藏帧来,⽤脚本来⽣成其中的数据,再把最后的结果⽂件写⼊到隐藏帧打印处理。
如果处理的好,实际上效果也是不错。
对于简单的打印需求应该是够了。
这⾥我举个实际中的例⼦来说明这种⽅式:开发中经常需要打印⼀些统计的结果给⽤户,⽐如说⼀个常见的功能是营业报表类的打印:操作员先输⼊查询条件,然后提交得到查询的结果,点击打印后,按照定义好的格式打印报表。
我们实现上⼤部分情况会把查询的结果绑定到DataGrid上来,然后打印DataGrid。
这种情况的打印⼀般来说格式⽐较固定简单,确定后基本不会再作更改。
所以可以采⽤IE直接打印,但若直接调⽤window.print来打印页⾯,页⾯上别的元素也会被打印处理,页头页尾的格式也不好控制。
2、ActiveX控件⾃⼰开发控件。
这种⽅式很多商⽤软件采⽤这种⽅式,写成控件后已经⽆所谓是在web中使⽤还是应⽤程序中使⽤了。
打印⽅式⾮常灵活,基本上程序能做到的web也能做得到。
但客户端需要安装组件,部署不是很⽅便。
3、.NET组件卢彦写过⼀篇很好的⽂章《利⽤XML实现通⽤WEB报表打印》,相信⼤家都看过了。
思路新颖,实现简单,确实不失为⼀种通⽤WEB打印解决办法,尤其利⽤XML来描述打印⽂件的⽅法给以后的格式的拓展留下很好的接⼝,⾮常容易扩充。
1、控制"纵打"、横打”和“页面的边距。
(1)<script defer>function SetPrintSettings() {// -- advanced featuresfactory.printing.SetMarginMeasure(2) // measure margins in inches factory.SetPageRange(false, 1, 3) // need pages from 1 to 3 factory.printing.printer = "HP DeskJet 870C "factory.printing.copies = 2factory.printing.collate = truefactory.printing.paperSize = "A4 "factory.printing.paperSource = "Manual feed "// -- basic featuresfactory.printing.header = "This is MeadCo "factory.printing.footer = "Advanced Printing by ScriptX "factory.printing.portrait = falsefactory.printing.leftMargin = 1.0factory.printing.topMargin = 1.0factory.printing.rightMargin = 1.0factory.printing.bottomMargin = 1.0}</script>(2)<script language= "javascript ">function printsetup(){// 打印页面设置wb.execwb(8,1);}function printpreview(){// 打印页面预览wb.execwb(7,1);}function printit(){if (confirm( '确定打印吗?')) {wb.execwb(6,6)}}</script><body><OBJECT classid= "CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 "height=0 id=wb name=wb width=0> </OBJECT><input type=button name=button_print value= "打印"onclick= "javascript:printit() "><input type=button name=button_setup value= "打印页面设置"onclick= "javascript:printsetup(); "><input type=button name=button_show value= "打印预览"onclick= "javascript:printpreview(); "><input type=button name=button_fh value= "关闭"onclick= "javascript:window.close(); ">------------------------------------------------关于这个组件还有其他的用法,列举如下:WebBrowser.ExecWB(1,1) 打开Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口Web.ExecWB(4,1) 保存网页Web.ExecWB(6,1) 打印Web.ExecWB(7,1) 打印预览Web.ExecWB(8,1) 打印页面设置Web.ExecWB(10,1) 查看页面属性Web.ExecWB(15,1) 好像是撤销,有待确认Web.ExecWB(17,1) 全选Web.ExecWB(22,1) 刷新Web.ExecWB(45,1) 关闭窗体无提示2、分页打印<HTML><HEAD><STYLE>P {}{page-break-after: always}</STYLE></HEAD><BODY><%while not rs.eof%><P> <%=rs(0)%> </P><%rs.movenext%><%wend%></HTML>3、ASP页面打印时如何去掉页面底部的路径和顶端的页码编号(1)ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉,打印就不出来了。
(2)<HTML><HEAD><TITLE> New Document </TITLE><META NAME= "Generator " CONTENT= "EditPlus "><META NAME= "Author " CONTENT= "YC "><script language= "VBScript ">dim hkey_root,hkey_path,hkey_keyhkey_root= "HKEY_CURRENT_USER "hkey_path= "\Software\Microsoft\Internet Explorer\PageSetup "'//设置网页打印的页眉页脚为空function pagesetup_null()on error resume nextSet RegWsh = CreateObject( "WScript.Shell ")hkey_key= "\header "RegWsh.RegWrite hkey_root+hkey_path+hkey_key, " "hkey_key= "\footer "RegWsh.RegWrite hkey_root+hkey_path+hkey_key, " "end function'//设置网页打印的页眉页脚为默认值function pagesetup_default()on error resume nextSet RegWsh = CreateObject( "WScript.Shell ")hkey_key= "\header "RegWsh.RegWrite hkey_root+hkey_path+hkey_key, "&w&b页码,&p/&P "hkey_key= "\footer "RegWsh.RegWrite hkey_root+hkey_path+hkey_key, "&u&b&d "end function</script></HEAD><BODY><br/><br/><br/><br/><br/><br/> <p align=center><input type= "button " value= "清空页码" onclick=pagesetup_null()> <input type= "button " value= "恢复页吗" onclick=pagesetup_default()> <br/></p></BODY></HTML>4、浮动帧打印<SCRIPT LANGUAGE=javascript>function button1_onclick() {var odoc=window.iframe1.document;var r=odoc.body.createTextRange();var stxt=r.htmlText;alert(stxt)var pwin=window.open( " ", "print ");pwin.document.write(stxt);pwin.print();}</SCRIPT>4、用FileSystem组件实现WEB应用中的本地特定打印<script Language=VBScript>function print_onclick //打印函数dim labellabel=bel.value //获得HTML页面的数据set objfs=CreateObject( "Scripting.FileSystemObject ") //创建FileSystem组件对象的实例set objprinter=objfs.CreateTextFile ( "LPT1: ",true) //建立与打印机的连接objprinter.Writeline( "__________________________________ ") //输出打印的内容objprinter.Writeline( "| | ")objprinter.Writeline( "| 您打印的数据是:"&label& " |”)objprinter.Writeline( "| | ")objprinter.Writeline( "|_________________________________| ")objprinter.close //断开与打印机的连接set objprinter=nothingset objfs=nothing // 关闭FileSystem组件对象end function</script>服务器端脚本:<%………set conn=server.CreateObject ( "adodb.connection ")conn.Open "DSN=name;UID=XXXX;PWD=XXXX; "set rs=server.CreateObject( "adodb.recordset ")rs.Open(“select ……”),conn,1,1……….%> //与数据库进行交互HTML页面编码:<HTML>………<FORM ID=printinfo NAME= "printinfo " ><INPUT type= "button "value= "打印> > "id=print name=print > //调用打印函数<INPUT type=hidden id=text1 name=label value= <%=………%> > //保存服务器端传来的数据………</HTML><object id= "factory " style= "display:none " viewastextclassid= "clsid:1663ed61-23eb-11d2-b92f-008048fdd814 "codebase= "/scriptx/ScriptX.cab#V ersion=5,60,0,360 "> </object><input type=button value=页面设置onclick= "factory.printing.PageSetup() "><input type=button value=打印预览onclick= "factory.printing.Preview() "><script language=javascript>function window.onload(){// -- advanced featuresfactory.printing.SetMarginMeasure(2) // measure margins in inchesfactory.printing.SetPageRange(false, 1, 3) // need pages from 1 to 3factory.printing.printer = "HP DeskJet 870C "factory.printing.copies = 2factory.printing.collate = truefactory.printing.paperSize = "A4 "factory.printing.paperSource = "Manual feed "// -- basic featuresfactory.printing.header = "居左显示&b居中显示&b居右显示页码,第&p页/共&P 页"factory.printing.footer = "(自定义页脚)"factory.printing.portrait = falsefactory.printing.leftMargin = 0.75factory.printing.topMargin = 1.5factory.printing.rightMargin = 0.75factory.printing.bottomMargin = 1.5}function Print(frame) {factory.printing.Print(true, frame) // print with prompt}</script><input type=button value= "打印本页" onclick= "factory.printing.Print(false) "><input type=button value= "页面设置" onclick= "factory.printing.PageSetup() "><input type=button value= "打印预览" onclick= "factory.printing.Preview() "> <br><a href= "/scriptx/docs/printdoc.htm?static " target=_blank> 具体使用手册,更多信息,点这里</a>//自带的打印预览WebBrowser.ExecWB(1,1) 打开Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口Web.ExecWB(4,1) 保存网页Web.ExecWB(6,1) 打印Web.ExecWB(7,1) 打印预览Web.ExecWB(8,1) 打印页面设置Web.ExecWB(10,1) 查看页面属性Web.ExecWB(15,1) 好像是撤销,有待确认Web.ExecWB(17,1) 全选Web.ExecWB(22,1) 刷新Web.ExecWB(45,1) 关闭窗体无提示<style media=print>.Noprint{display:none;} <!--用本样式在打印时隐藏非打印项目-->.PageNext{page-break-after: always;} <!--控制分页--></style><object id= "WebBrowser " width=0 height=0 classid= "CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 "></object><center class= "Noprint " ><input type=button value=打印onclick=document.all.WebBrowser.ExecWB(6,1)><input type=button value=直接打印onclick=document.all.WebBrowser.ExecWB(6,6)><input type=button value=页面设置onclick=document.all.WebBrowser.ExecWB(8,1)></p><p> <input type=button value=打印预览onclick=document.all.WebBrowser.ExecWB(7,1)></center>//去掉打印时的页眉页脚<script language= "javascript ">var HKEY_Root,HKEY_Path,HKEY_Key;HKEY_Root= "HKEY_CURRENT_USER ";HKEY_Path= "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\ ";//设置网页打印的页眉页脚为空function PageSetup_Null(){try{var Wsh=new ActiveXObject( "WScript.Shell ");HKEY_Key= "header ";Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key, " ");HKEY_Key= "footer ";Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key, " ");}catch(e){}}//设置网页打印的页眉页脚为默认值function PageSetup_Default(){try{var Wsh=new ActiveXObject( "WScript.Shell ");HKEY_Key= "header ";Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key, "&w&b页码,&p/&P ");HKEY_Key= "footer ";Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key, "&u&b&d ");}catch(e){}}</script><input type= "button "value= "清空页码" onclick=PageSetup_Null()><input type= "button "value= "恢复页码" onclick=PageSetup_Default()>Javascript实现打印网页中定义的部分内容正常情况下的打印是使用window.print(); 直接整页打印,但如果需要打印网页中定义的部分内容,则可使用如下的方法:1、在页面的代码头部处加入JavaScript:JavaScript代码<script language=javascript>function doPrint() {bdhtml=window.document.body.innerHTML;sprnstr="<!--startprint-->";eprnstr="<!--endprint-->";prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));window.document.body.innerHTML=prnhtml;window.print();}</script>2、在页面正文处加上<!--startprint-->与<!--endprint-->标识。