`
Fly_m
  • 浏览: 259638 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用JasperReport输出image图像

阅读更多

    最近公司新项目上有一个新的需要,即在原来用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比例值(和图像比例一致),这样就可以在生成时生成相应比例的图像了(而且生成的图像不是直接在原有大小的基础之上进行缩放,而是像矢量图一样按精确像素进行比例重绘)。

 

    我发现自己在网上找答案的时候远远多于去自己思考的时间,而且网上的许多东西都是重复的,想找到需要的信息还真困难。遇到问题时,如果自己想想能不能很好的解决,为什么非得在网上找呢。

分享到:
评论
1 楼 amwyyyy 2014-07-04  
很有用,帮了我大忙

相关推荐

    JasperReport浏览器输出PDF为空白页的解决方案

    标题中的“JasperReport浏览器输出PDF为空白页”通常意味着在使用JasperReport生成PDF报表时,浏览器未能正确显示内容。这可能是由多种原因引起的,包括但不限于以下几点: 1. **XML解析错误**:`test.jrxml`文件是...

    使用JasperReport制作PDF所需要的包(2)

    在IT行业中,报表生成是许多应用的核心功能,而JasperReport是Java环境下广泛使用的开源报表工具,它允许开发者创建复杂的报告并以多种格式输出,如PDF、HTML、Excel等。本篇文章将详细讲解如何利用JasperReport制作...

    jasperReport5.6.1编码以及使用

    jasperReport5.6.1编码以及使用 JasperReport是一款功能强大的报表生成工具,广泛应用于各种Java应用程序中。下面是关于JasperReport5.6.1编码以及使用的详细知识点。 JasperReport编码 JasperReport编码是指在...

    使用JasperReport+iReport进行WEB开发

    JasperReport和iReport的结合使用,为开发者提供了一种高效、灵活的方式来设计和生成复杂的报表。本文将深入探讨如何利用这两个工具进行WEB开发。 JasperReport是一款开源的Java报表库,它支持多种数据源,如数据库...

    使用JasperReport制作PDF所需要的包(1)

    在IT行业中,报表生成是数据分析和业务展示的关键环节,而JasperReport则是一个强大的开源报表工具,能够帮助开发者创建复杂的报告并输出为多种格式,包括PDF。本篇将详细讲解如何利用JasperReport来制作PDF,并介绍...

    SSH集成JasperReport例子,支持预览导出Exce导出Pdf

    一个使用SSH集成JasperReport的例子,支持预览、导出Excel、导出Pdf。 部署到Tomcat服务器可运行,该例子中采用了一个报表框架,框架的类图结构可参考压缩包中的“报表设计.jpg”。 希望对您有帮助。

    使用jasperReport实现动态表头.pdf

    在本文中,我们将深入探讨如何使用JasperReport来实现动态表头,这是一个在报表生成过程中非常重要的特性,尤其是在处理如服装行业中需要灵活调整的尺码组数据时。JasperReport是一个开源的报表工具,具有良好的可...

    jasperReport +spring 的使用

    - 使用jasperReport提供的API可以轻松实现报表的导出功能。 - 例如,为了导出PDF格式的报表,可以使用jasperExportManager.exportReportToPdfStream方法。 - 对于HTML和Excel格式的导出,也有相应的API可供调用。...

    jasperReport详细教程及例子

    - **图像(Image)**: 可以插入图片,支持动态加载。 - **子报表(Subreport)**: 在主报表中嵌入另一个报表,用于分组或显示详细信息。 - **图表(Chart)**: 可以根据数据生成各种图表,如柱状图、饼图、线图等。 ...

    JasperReport使用

    【JasperReport使用】这篇教程主要讲解如何使用JasperReport设计和生成报表,特别是通过iReport这个可视化工具来创建报表模板。JasperReport是一个开源的Java报表库,它允许开发者生成复杂的报表,包括数据的计算、...

    JasperReport实例导入可用

    通过这个实例,我们可以深入理解 JasperReport 如何处理数据、设计报表以及生成最终输出的过程。实践中,可以结合实际需求,调整模板设计,优化数据处理逻辑,从而实现更复杂的报表功能。学习和掌握 JasperReport 能...

    JasperReport与iReport的配置与使用.docx

    JasperReport与iReport的配置与使用 JasperReport与iReport是两款流行的报表工具,它们可以帮助开发者快速生成各种格式的报表。以下是关于JasperReport与iReport的配置与使用的详细知识点: JasperReport简介 ...

    jasperreport教程

    在Java应用中,JasperReport通常与iReport(一个用于设计报表的图形界面工具)一起使用,为开发者提供了一个强大的报表解决方案。 **1. JasperReport基本概念** - **模板(Template)**: JasperReport的报表设计是...

    JasperReport报表设计总结

    下面是一个简单的示例,展示了如何使用JDBCConnection类来获取数据库连接并传递给JasperReport使用。 ```java public class JDBCConnection { private String jdbcDriver; private String jdbcUrl; private ...

    使用JavaBean构造JasperReport子报表

    在构建复杂的报告时,比如使用JasperReport,JavaBean可以作为数据源,帮助我们构造动态、结构化的报告内容。JasperReport是一个强大的开源报告生成库,它允许开发者创建、设计和导出多种格式的报告,如PDF、HTML、...

    jasperreport 生成pdf,html,xml,csv,xls报表,myeclipse源码

    1. **报表设计**:jasperreport使用JRXML格式的XML文件来定义报表布局和样式。这些设计文件可以包含文本、图像、表格、图表等多种元素,并支持复杂的排版和样式设置。 2. **数据绑定**:jasperreport支持多种数据源...

    JasperReport Server安装手册

    JasperReport Server 安装手册 JasperReport Server ...JasperReport Server 安装手册提供了详细的安装和配置指南,旨在帮助用户正确地安装和配置 JasperReport Server,以便正确地运行和使用 JasperReport Server。

    jasperReport 亚洲语言包

    **jasperReport 亚洲语言包** jasperReport是一款强大的开源报表工具,广泛应用于Java应用程序中,用于设计、创建和...在进行国际化开发时,理解并正确使用这些支持包,能够极大地提升jasperReport的功能和用户体验。

Global site tag (gtag.js) - Google Analytics