ASP 水晶报表

JavaScript018

ASP 水晶报表,第1张

哎,早就不用水晶了,做报表习惯性用FineReport,在FineReport帮助文档里面查了一下此问题的解决方案,在Finereport中,这被称为:js调用打印_直接通过模板传递参数打印,解决思路如下,

供借鉴:

1. 问题描述

XX公司在使用FineReport的打印功能时,其模板是一张订单形式的模板,客户在浏览器端使用订单时,填写完该订单后,需要将参数传递给模板,然后直接打印订单,但是如果订单填写的东西太多,以参数的形式将值传递给模板会使性能很差,那么该以什么样的形式来传递参数呢?

2. 解决思路

直接通过模板来传递参数,即网页直接调用设计好的模板,在网页里填参数就相当于在模板里填参数,然后实现打印。

用两张模板来实现,主模板用来填写参数,并将参数传递给子模板,子模板获取传递过来的参数,并打印出来。

3. 解决方案

3.1 主模板

报表主体

报表主体样式如下图:

两个文本控件的控件名字分别为,NAME和SEX。

js

给打印按钮添加点击事件,js如下:

var name=FR.cjkEncode($("[name='NAME']").val())

var sex=FR.cjkEncode($("[name='SEX']").val())

para={

name:name,

sex:sex

}

var config={

url:"http://localhost:8075/WebReport/ReportServer?reportlet=son.cpt",

isPopUp:false,

data:para

}

FR.doURLPDFPrint(config)

保存模板为main.cpt。

3.2 子模板

报表主体

注:name和sex参数是在主模板的js里面定义的。

保存模板为son.cpt,子模板的名字和路径应该与主模板js里面的名字和路径一致。

3.3 效果查看

以op=form的方式打开main.cpt,填写姓名和性别,点击打印按钮,如下图:

此处我们用的是PDF打印,点击打印按钮之后会下载一个PDF文件son.pdf。

打开pdf,可以看到姓名和性别这两个数据被打印出来了,并且打印的格式是按照son.cpt中的样式,

楼主这问题描述太不清楚了。。。我用的报表开发工具是FineReport,传参和导入数据是基本功能啊,看看帮助文档就可以了,用FineReport做这个功能的思路如下,供楼主借鉴:直接通过模板来传递参数,即网页直接调用设计好的模板,在网页里填参数就相当于在模板里填参数,然后实现打印。用两张模板来实现,主模板用来填写参数,并将参数传递给子模板,子模板获取传递过来的参数,并打印出来。具体解决方案1主模板报表主体报表主体样式如下图:两个文本控件的控件名字分别为,NAME和SEX。js给打印按钮添加点击事件,js如下:varname=FR.cjkEncode($("[name='NAME']").val())varsex=FR.cjkEncode($("[name='SEX']").val())para={name:name,sex:sex}varconfig={url:"http://localhost:8075/WebReport/ReportServer?reportlet=son.cpt",isPopUp:false,data:para}FR.doURLPDFPrint(config)保存模板为main.cpt。2子模板报表主体注:name和sex参数是在主模板的js里面定义的。保存模板为son.cpt,子模板的名字和路径应该与主模板js里面的名字和路径一致。3效果查看以op=form的方式打开main.cpt,填写姓名和性别,点击打印按钮,如下图:此处我们用的是PDF打印,点击打印按钮之后会下载一个PDF文件son.pdf。打开pdf,可以看到姓名和性别这两个数据被打印出来了,并且打印的格式是按照son.cpt中的样式,如下图:找了一下FineReport的百度网盘下载地址,楼主可以体验一下:

BS模式的工具栏的打印,必须在报表的情况下,不能说只有一个按钮就可以了的。

可以通过调用现有的工具条打印方法来实现,将工具条隐藏,然后再模拟点击打印按钮,假设页面上的crviewer控件名称为CrystalReportViewer1

1、设置该控件的属性,将其隐藏

2、增加一个HTML button

3、增加一个JS函数,其中CrystalReportViewer1$ctl02是打印按钮的name

<script type="text/javascript">

function printIt() {

document.getElementsByName("CrystalReportViewer1$ctl02$ctl02").item(0).click()

return false

 }

</script>

差不多这样就可以了。相对来说我觉得这方面有点小麻烦,不及其他一些软件例如finereport打印来的方便,直接调用就可以了,代码什么的也是现成的。