最近公司新项目上有一个新的需要,即在原来用jasper打印出来的文档上面,加上一个可以进行识别的东西(暂定为条形码),然后对这个文档的扫描件进行识别。初步确定就是修改原有的jasper资源文件,并在打印方法中加入一个对条形码的field引用,这样来完成在文档上打印条形码的需求。
但后面这一需要进一步修正,因为要将扫描件保存入数据库中,这时就想到如果不通过扫描设备,而直接将jasper在客户端调出打印的时候,由服务器端生成一个jasper图像,再将这个图像直接入库。这样就避免了二次扫描的麻烦。
在网上google了一下关于jasperReport的应用,发现大部分都是讲如何将jasper导入一个html或pdf进行打印的例子,并没有直接将jasperReport打印生成一个图像的示例。包括jaspe自带的demo里面,也没有相应的例子,决定自己看看相应的api,找一个可以运用的东西。
产生想到的是jasper自带的ImageServlet这个类,认为可以从这个类方法中找到一些可以参考的东西。可惜将代码粗略看一道,就失望了。这个类不是将一个jasper输出一个图像文件,而是输出一个jasper文件中指定图像名称中的图像信息。也就是说,这个类根本不能将一个jasper完整输出成一个图像的byte[]数组。看完这个类,我还真不知道这个类有什么样,至少现在我不看好这个类。
接到就找export包中的相应类,看能否找到一个根图像有关的exporter,最后找到这样一个类:JRGraphics2DExporter.java,从文档可以看出,它可以完整的将一个jasper文档输出到一个graphics对象中,而不像其他的exporter只是近似的模拟。但是这个文档同时也说明,它只是输出到graphics对象,而不是输出到一个文件或字节流中。当然这不是问题,我们可以创建一个可以产生graphics的对象(比如说bufferedimage),然后用g进行export,当然最后的信息就保存在拥有g的对象上了。接下来的操作就简单了。
如下代码所示:
Map parameters = new HashMap();
JasperPrint jasperPrint =
JasperFillManager.fillReport(
(JasperReport) JRLoader.loadObject(new File("d:/injuryPresume.jasper")),//jasper对象
parameters,//参数列表
new JREmptyDataSource()//数据源信息
);
JRGraphics2DExporter exporter = new JRGraphics2DExporter();//创建graphics输出器
//创建一个影像对象
BufferedImage bufferedImage = new BufferedImage(jasperPrint.getPageWidth() * 4, jasperPrint.getPageHeight() * 4, BufferedImage.TYPE_INT_RGB);
//取graphics
Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
//设置相应参数信息
exporter.setParameter(JRGraphics2DExporterParameter.GRAPHICS_2D, g);
exporter.setParameter(JRGraphics2DExporterParameter.ZOOM_RATIO, Float.valueOf(4));
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.exportReport();
g.dispose();//释放资源信息
//这里的bufferedImage就是最终的影像图像信息,可以通过这个对象导入到cm中了.
ImageIO.write(bufferedImage, "JPEG", new File("d:/aa.jpg"));
由上可以看出,和普通的htmlexporter一样,产生创建jasperRecport对象,然后进行填充,接下来就是export了。
Export操作产生创建一个用于图像export的graphics2dExporter对象,然后从bufferedImage中取出g,接着将g,jasperPrint以及其他参数设置到exporter上,调用exportReport进行导出,最后释放g,使之生成图像。
同时,从上可以看出,要创建一个指定大小的bufferedImage,以便与jasper的大小相一致,幸好japserPrint有一个取自己width和height的方法,我们直接创建一个和jasperPrint一样大小的图像就可以了。而原代码中,创建的图像大小是原大小的4倍,这是为了让图像尽量大一些,这样进行图像识别时,能够进行有效地识别(比如识别图像中的条形码时,如果图像太小,间隔不够,是读取不了的)。当然图像大小变大之后,需要调整生成时间的比例大小,通过为JRGraphics2DExporterParameter.ZOOM_RATIO设置一个float比例值(和图像比例一致),这样就可以在生成时生成相应比例的图像了(而且生成的图像不是直接在原有大小的基础之上进行缩放,而是像矢量图一样按精确像素进行比例重绘)。
我发现自己在网上找答案的时候远远多于去自己思考的时间,而且网上的许多东西都是重复的,想找到需要的信息还真困难。遇到问题时,如果自己想想能不能很好的解决,为什么非得在网上找呢。
分享到:
相关推荐
标题中的“JasperReport浏览器输出PDF为空白页”通常意味着在使用JasperReport生成PDF报表时,浏览器未能正确显示内容。这可能是由多种原因引起的,包括但不限于以下几点: 1. **XML解析错误**:`test.jrxml`文件是...
在IT行业中,报表生成是许多应用的核心功能,而JasperReport是Java环境下广泛使用的开源报表工具,它允许开发者创建复杂的报告并以多种格式输出,如PDF、HTML、Excel等。本篇文章将详细讲解如何利用JasperReport制作...
jasperReport5.6.1编码以及使用 JasperReport是一款功能强大的报表生成工具,广泛应用于各种Java应用程序中。下面是关于JasperReport5.6.1编码以及使用的详细知识点。 JasperReport编码 JasperReport编码是指在...
JasperReport和iReport的结合使用,为开发者提供了一种高效、灵活的方式来设计和生成复杂的报表。本文将深入探讨如何利用这两个工具进行WEB开发。 JasperReport是一款开源的Java报表库,它支持多种数据源,如数据库...
在IT行业中,报表生成是数据分析和业务展示的关键环节,而JasperReport则是一个强大的开源报表工具,能够帮助开发者创建复杂的报告并输出为多种格式,包括PDF。本篇将详细讲解如何利用JasperReport来制作PDF,并介绍...
一个使用SSH集成JasperReport的例子,支持预览、导出Excel、导出Pdf。 部署到Tomcat服务器可运行,该例子中采用了一个报表框架,框架的类图结构可参考压缩包中的“报表设计.jpg”。 希望对您有帮助。
在本文中,我们将深入探讨如何使用JasperReport来实现动态表头,这是一个在报表生成过程中非常重要的特性,尤其是在处理如服装行业中需要灵活调整的尺码组数据时。JasperReport是一个开源的报表工具,具有良好的可...
- 使用jasperReport提供的API可以轻松实现报表的导出功能。 - 例如,为了导出PDF格式的报表,可以使用jasperExportManager.exportReportToPdfStream方法。 - 对于HTML和Excel格式的导出,也有相应的API可供调用。...
- **图像(Image)**: 可以插入图片,支持动态加载。 - **子报表(Subreport)**: 在主报表中嵌入另一个报表,用于分组或显示详细信息。 - **图表(Chart)**: 可以根据数据生成各种图表,如柱状图、饼图、线图等。 ...
【JasperReport使用】这篇教程主要讲解如何使用JasperReport设计和生成报表,特别是通过iReport这个可视化工具来创建报表模板。JasperReport是一个开源的Java报表库,它允许开发者生成复杂的报表,包括数据的计算、...
通过这个实例,我们可以深入理解 JasperReport 如何处理数据、设计报表以及生成最终输出的过程。实践中,可以结合实际需求,调整模板设计,优化数据处理逻辑,从而实现更复杂的报表功能。学习和掌握 JasperReport 能...
JasperReport与iReport的配置与使用 JasperReport与iReport是两款流行的报表工具,它们可以帮助开发者快速生成各种格式的报表。以下是关于JasperReport与iReport的配置与使用的详细知识点: JasperReport简介 ...
在Java应用中,JasperReport通常与iReport(一个用于设计报表的图形界面工具)一起使用,为开发者提供了一个强大的报表解决方案。 **1. JasperReport基本概念** - **模板(Template)**: JasperReport的报表设计是...
下面是一个简单的示例,展示了如何使用JDBCConnection类来获取数据库连接并传递给JasperReport使用。 ```java public class JDBCConnection { private String jdbcDriver; private String jdbcUrl; private ...
在构建复杂的报告时,比如使用JasperReport,JavaBean可以作为数据源,帮助我们构造动态、结构化的报告内容。JasperReport是一个强大的开源报告生成库,它允许开发者创建、设计和导出多种格式的报告,如PDF、HTML、...
1. **报表设计**:jasperreport使用JRXML格式的XML文件来定义报表布局和样式。这些设计文件可以包含文本、图像、表格、图表等多种元素,并支持复杂的排版和样式设置。 2. **数据绑定**:jasperreport支持多种数据源...
JasperReport Server 安装手册 JasperReport Server ...JasperReport Server 安装手册提供了详细的安装和配置指南,旨在帮助用户正确地安装和配置 JasperReport Server,以便正确地运行和使用 JasperReport Server。
**jasperReport 亚洲语言包** jasperReport是一款强大的开源报表工具,广泛应用于Java应用程序中,用于设计、创建和...在进行国际化开发时,理解并正确使用这些支持包,能够极大地提升jasperReport的功能和用户体验。