供借鉴:
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打印来的方便,直接调用就可以了,代码什么的也是现成的。