利用XML实现通用WEB报表打印实际使用中的例子

web|xml|报表打印

最近做的一个B/S项目,在打印时采用了在IE中嵌入.net winform控件和XML结合的方式(参见http://www.yesky.com/20030214/1652186.shtml),在实际应用过程中,有一些心得,和大家分享。
(一).使用通用模版格式化XML文件
系统中共用到了三种单据,分别为出库单,入库单,送货单,因此,定义三个模版文件,格式如下:
chukudan.xsl:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
   <xsl:template match="Bill">  
   <root>
 <pagesetting>
  <landscape>false</landscape>
  <paperkind>Custom</paperkind>
  <paperwidth>800</paperwidth>
  <paperheight>600</paperheight>
  <paperleft>0</paperleft>
  <paperight>0</paperight>
  <papetop>0</papetop>
  <papebottom>0</papebottom>
 </pagesetting>
 <reporttable>
      <bill x="55" y="19" border="0" bordercolor="white" maxlines="6">
  <xsl:for-each select="BillMaster">
   <toptable width="743">
    <tr height="20">
     <td width="118"  align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">车次号:</td>
     <td width="449"  align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White"><xsl:value-of select="SERIAL_NO" /></td>
     <td width="35"  align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"></td>
     <td width="138"  align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"></td>
    </tr>  
   </toptable>
  </xsl:for-each>
  <detailtable width="373">
   <xsl:for-each select="BillDetail">  
    <tr height="33">
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White"><xsl:value-of select="BILL_NO" /></td>
     <td width="173" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="PROD_MODEL_2" /></td>
     <td width="55" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White"><xsl:value-of select="PROD_NUM" /></td>
     <td width="55" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="PIECE_NUM" /></td>         
    </tr> 
  
   </xsl:for-each>
  </detailtable>
  <mastertable width="370">
   <xsl:for-each select="BillMaster">
    <tr height="33">
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White">
     </td>
     <td width="280" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="ADDRESS" /></td>
    </tr>
    <tr height="33">
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White"><xsl:value-of select="CONTACT_PERSON" /></td>
     <td width="70" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="120" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White"><xsl:value-of select="CONTACT_PHONE" /></td>
    </tr>
    <tr height="33">       
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White">
     </td>
     <td width="280" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="DRIVER_UNIT" /></td>
    </tr>
    <tr height="33">
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="DRIVER_NO" /></td>
     <td width="70" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="120" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="DRIVER_PERSON" /></td>
    </tr>
    <tr height="33">
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="CAR_MODEL" />
     </td>
     <td width="70" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="120" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"></td>
    </tr>
    <tr height="33">
     <td width="90"  align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="280" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="COME_TO" /></td>
    </tr>
   </xsl:for-each>
  </mastertable>
 
  <foottable width="743">
   <xsl:for-each select="BillMaster">
    <tr height="35">
     <td width="90" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White"></td>
     <td width="173" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"></td>
     <td width="55" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="White"></td>
     <td width="55" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"></td>         
   
     <td width="90"  align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white">
     </td>
     <td width="280" align="right"  fontsize="10" fontname="宋体" fontcolor="black" b="true" i="false" u="false" bgcolor="white"><xsl:value-of select="REMARK" /></td>
    </tr> 
   </xsl:for-each>
      </foottable>  
  
      </bill>
   </reporttable>
</root>    
   </xsl:template> 

</xsl:stylesheet>
其中,toptable是表头,detailtable是表格左边的产品明细,mastertable是表格右边的运输信息等,foottable是最下面制表人等信息。

然后,在asp.net页面中,将查询出的结果作如下转换

            '是否取得了单据
            If billInfoXml <> Nothing Then

                billInfoDoc.LoadXml(billInfoXml)
                'billInfoDoc.LoadXml("http://111.111.111.111/stockmg/test.xsl")
                billTrans.Load(billFormatXmlUrl)

                billXmlWr.Formatting = System.Xml.Formatting.Indented
                billXmlWr.Indentation = 4
                billXmlWr.IndentChar = " "

                billTrans.Transform(billNav, Nothing, billXmlWr, Nothing)
                billXmlWr.Flush()

            End If

返回的信息用javascript代码加载到打印控件:
 parent.frames.frmhidPrint.parent.frames.frmhidPrint.print1.SetXml(xmlResult); //SetMessage(xmlResult); parent.frames.frmhidPrint.parent.frames.frmhidPrint.print1.PrintAct();

注意,这里调用打印控件用了parent.frames....这是为了节省每次打开页面时加载打印控件的时间,使用了一个框架网页,把打印控件放在一个单独的页面中,从而不需每次加载。

时间: 2024-10-29 12:04:13

利用XML实现通用WEB报表打印实际使用中的例子的相关文章

ASP.NET中应用XML技术实现Web报表打印

应用XML技术实现报表打印方案的设计与实现笔者为了能够快速实现简单的报表打印,设计了下面的方案.编写一个通用打印页面,要打印报表将参数写入一个XML文档,调用页面XMLReport.aspx?report=报表名,即可完成报表的制作3.1 创建自定义的XML报表文件XML主要用来描述打印报表的名称,数据来源,格式,分页打印等信息,具体标签可自己定义,下面是笔者针对会员管理系统报表打印所制定的XML文档:MemberList.xml<?xml version="1.0" encod

ASP.NET应用XML技术实现Web报表打印

XML主要用来描述打印报表的名称,数据来源,格式,分页打印等信息,具体标签可自己定义,下面是笔者针对会员管理系统报表打印所制定的XML文档: Memberlist.xml 〈xml version="1.0" encoding="utf-8" > 〈XmlReport> 〈Page> 〈Title>Member information〈/Title> 〈ApplyXSLT>〈/ApplyXSLT> 〈/Page> 〈R

Web报表打印·简单实现·(一)

web|报表打印 近日看到论坛中有好多人提到,Web 方式打印报表 的问题 都感觉很辣手.本人有点小技巧愿意拿处来和大家分享.本方法不分语言(ASP,ASP.NET,JSP,PHP..)可以生成HTML的语言都可以使用.其实很简单只要你略懂 HTML,CSS 即可,打印的出来的效果(那就要看你自己了)个人认为一般的打印完全可以应付. 先给一个简单实用的方式(可以打印多页,控制分页,隐藏非打印项目)<!--语言无关 保存成 .HTML 看看--><html><head>&

Web报表打印?简单实现?(一)

近日看到论坛中有好多人提到,Web 方式打印报表 的问题 都感觉很辣手.本人有点小技巧愿意拿处来和大家分享.本方法不分语言(ASP,ASP.NET,JSP,PHP..)可以生成HTML的语言都可以使用.其实很简单只要你略懂 HTML,CSS 即可,打印的出来的效果(那就要看你自己了)个人认为一般的打印完全可以应付.先给一个简单实用的方式(可以打印多页,控制分页,隐藏非打印项目)<!--语言无关 保存成 .HTML 看看--><html><head><title&g

利用xml轻松读取web.config中的用户自定义节

虽然vs.net2.0为我们提供了 ConfigurationManager.AppSettings["..."]; ConfigurationManager.ConnectionStrings["..."]; 这样方便快捷的方法来访问web.config中的AppSettings和ConnectionStrings这二个节的内容 但对于其它节,特别是用户自定义节的访问却并不方便,比如web.config中有这么一段内容 <?xml version="

在WEB应用中报表打印的实现

web|报表打印 WEB应用中报表打印的实现 随着世界范围内Internet环境的形成,全球正进入一个以网络为中心的计算时代.Web模型是在传统的C/S模型的基础上发展起来的一种新的Browser/Server计算模式.Browser/Server模型简化了C/S中的客户端,客户端只需装上操作系统.网络协议软件及浏览器:而服务器端则集中了所有的应用逻辑,开发.维护等几乎所有工作也都集中在服务器端.这时的客户机被称为瘦客户机,服务器被称为肥服务器.而WEB应用中的客户端的报表打印则没有C/S模型那

Web打印解决方案之普通报表打印功能_javascript技巧

做过很多的Web项目,大多数在打印页面内容的时候,采用的都是通过Javascript调用系统内置的打印方法进行打印,也就是调用PrintControl.ExecWB(?,?)实现直接打印和打印预览功能.打印的效果及控制性虽然不是很好,但是也能勉强使用,应付一般的打印还是可以的了. 代码如下所示: 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->

讨论创建基于WSE的报表打印服务及其实现

报表打印|创建|报表打印 摘要:看过卢彦先生的关于WEB报表打印实现文章的人,一定会为里面所提供的解决方案击节叫好,本文试图给大家展现一个更灵活的打印作业流水,并具有一定的实用性.建议大家在阅读本文之前先阅读卢彦先生的两篇文章,同时本文采用了微软的WSE(1.0)作为辅助工具,对此感到陌生的朋友,建议先参考一些概念性的文章,我在文章的最后列了一些参考资料和所需工具,大家可自行体会. ---------------------------------------------------------

跪求在.NET2003里怎样实现DataGrid水晶报表打印 WEB程序的?在线等!望高手速度解决!谢谢!急!!!!!

问题描述 希望大家发展点同情心好么! 解决方案 解决方案二:if(mytable.Rows.Count==0)//mytable是一个DataTable,也可用DataSet{this.Button1.Enabled=false;return;}System.Web.UI.WebControls.DataGriddgExport=null;//IO用于导出并返回excel文件System.IO.StringWriterstrWriter=null;System.Web.UI.HtmlTextWr