天天看点

Jasperreport+applet实现客户端打印

需求:Web应用中,在客户端实现打印功能

可能遇到的问题:

[list]

[*][b]64bit系统装64bit的jre但是不好使[/b]

[*]装32bit的jre就好了

[*][b]打印时出现invalid header[/b]

[*]有可能是编译文件时的Jasperreport的jar版本和运行时的不一样

[*][b]打印出出现“attribute 'uuid' is not allowed to appear in element 'jasperreport'”[/b]

[*]打开JRXML文件,用正则表达式搜索uuid="\w*-\w*-\w*-\w*-\w*",全部删除

[*][b]applet访问权限受限[/b]

[*]在jre的lib\security\java.policy中的grant {...}代码块中增加

permission java.security.AllPermission;

permission java.net.SocketPermission "*", "accept, connect, listen, resolve";

[/list]

思路:

[list]

[*]利用iReport制作模版

[*]写后台代码,得到JasperPrint并输出到Servlet的流中

[*]用applet接受流,并调用打印机打印

[/list]

使用的框架、设备、环境:

[list]

[*]Spring MVC

[*]Spring Tool Suite(Eclipse系列的,Eclipse穿了个马甲)

[*]打印机EPSON LQ-630K

[/list]

资源:

[list]

[*]报表设计软件,用于制作模版,我使用的是iReport-5.0.0-windows-installer

[url]http://sourceforge.net/projects/ireport/files/iReport/iReport-5.0.0/[/url]

[*]EPSON LQ-630K驱动[url]http://epson.com.cn/[/url]

[/list]

正文:

1. 制作模版

1.1 准备工作

[*]新建一个类,包含需要打印的信息,比如EntityDto,注意要有setter和getter方法

[*]新建一个类,其中包含可以产生Collection<EntityDto>的方法

[*] 引入需要的jar,由于自己做的是maven工程,所以只需在pom文件中增加依赖

[*]编写负责打印的类的代码

1.2 制作模版

[list]

[*]首先安装iReport-5.0.0-windows-installer

[*]新建一个report,如果没有特殊要求就不用选择其他样式的模版,全点击“下一步”

[*]在选项卡中选择“工具”--“选项”--“Classpath”,把编译好的EntityDto所在的jar(没有就打一个jar,如果添加文件夹自己试了不好用,原因不明)添加到其中

[*]在主面板中,在“Preview”的右侧有一个类似数据库似的图标,点击,选择“JavaBeans Datasource”的选项卡,在输入框中输入类的全名(包括所在包路径),点击“Read attributes”,选择需要的属性,然后点击“Add selected field(s)”,确认

[*]在左侧Fields的列表中就可以看到需要的属性了,然后点击把他们拖过来就可以了

[*]点击preview,如果没有什么问题就把report.jrxml,report.jasper都拷贝到工程资源文件下的iReportTemplate目录中

[/list]

2. 准备打印机

[list]

[*]安装驱动

[/list]

3. 使用applet打印

如果现在直接调用代码打印会在服务端打印,由于自己开发的时候是服务端和客户端一体,所以可能忽略这个错误。

[b]注意:这个类一定要放在工程的根目录,也就是不存在任何包中,虽然有点不科学,但是在调用的时候如果有包路径是不好使的[/b]

[*] 写applet类

[*]使用mvc的控制器得到流

[*]编写html代码

最后把编译好的JRPrinterApplet类放在和html同一个文件夹下即可访问,另外注意archive中有的几个包也要和html放在同样的文件夹中