Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示

本文主要是介绍Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示;

代码如下:

Demo07.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Demo07" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0431a06d-749b-411d-8fbf-592aa6b1cca1"><property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/><queryString><![CDATA[]]></queryString><background><band splitType="Stretch"/></background><detail><band height="125" splitType="Stretch"><staticText><reportElement x="148" y="34" width="100" height="30" uuid="2bea566e-a20b-4bd6-abe0-0f7760753a24"/><text><![CDATA[Hello World!]]></text></staticText></band></detail>
</jasperReport>

Demo08.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Demo08" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="eba4c4b3-0a9c-43a5-b941-5f9d359ffaf4"><property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/><queryString><![CDATA[]]></queryString><background><band splitType="Stretch"/></background><detail><band height="125" splitType="Stretch"><staticText><reportElement x="172" y="38" width="100" height="30" uuid="416b6928-db60-40fb-b416-46dbc989203c"/><text><![CDATA[hahahalouu]]></text></staticText></band></detail>
</jasperReport>

JasperServletMul.java

package com.accord.servlet;import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;public class JasperServletMul extends HttpServlet {private static final long serialVersionUID = 1L;public JasperServletMul() {super();}public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@SuppressWarnings("deprecation")public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext context = this.getServletConfig().getServletContext(); 	try {//JasperCompileManager.compileReportToFile("E:/report/DbReport.jrxml");String filename = JasperCompileManager.compileReportToFile(context.getRealPath("/jasper/Demo07.jrxml"));String filename02 = JasperCompileManager.compileReportToFile(context.getRealPath("/jasper/Demo08.jrxml"));System.out.println(filename);System.out.println(filename02);} catch (JRException e1) {e1.printStackTrace();}//编译jrxml文件,生成jasper文件// 第一步:装载jasper文件File jasperFileName = new File(context.getRealPath("/jasper/Demo07.jasper"));// 第二步:设置参数值/* 设置参数 */HashMap<String, Object> params2 = new HashMap<String, Object>();// 建立参数表params2.put("name","我们的产品"); // 设置参数值// 第三步:利用JasperRunManager生成PDF文件try {JasperRunManager.runReportToPdfFile(jasperFileName.getPath(),params2, new JREmptyDataSource());} catch (JRException e) {e.printStackTrace();}JRPdfExporter jrpdf = new JRPdfExporter();JasperReport report1 = null;try {report1 = (JasperReport) JRLoader.loadObject(new File(context.getRealPath("/jasper/Demo07.jasper")));} catch (JRException e2) {e2.printStackTrace();}JasperReport report2 = null;try {report2 = (JasperReport) JRLoader.loadObject(new File(context.getRealPath("/jasper/Demo08.jasper")));} catch (JRException e1) {e1.printStackTrace();}List<String> list = new ArrayList<String>();list.add("测试数据");JRBeanCollectionDataSource ds1 = new JRBeanCollectionDataSource(list);JRBeanCollectionDataSource ds2 = new JRBeanCollectionDataSource(list);HashMap<String, Object> params = new HashMap<String, Object>();// 建立参数表params.put("name", "我们的产品"); // 设置参数值JasperPrint jasperPrint = null;try {jasperPrint = JasperFillManager.fillReport(report1,params,ds1);} catch (JRException e1) {e1.printStackTrace();}JasperPrint jasperPrint2 = null;try {jasperPrint2 = JasperFillManager.fillReport(report2,params,ds2);} catch (JRException e1) {e1.printStackTrace();}List jasperPrintList = new ArrayList();jasperPrintList.add(jasperPrint);jasperPrintList.add(jasperPrint2);String filename = context.getRealPath("/jasper/")+"/" + (System.currentTimeMillis() + "" )+ ".pdf";File file = new File(filename);ByteArrayOutputStream baos = new ByteArrayOutputStream();JRPdfExporter exporter = new JRPdfExporter();exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);try {exporter.exportReport();} catch (JRException e1) {e1.printStackTrace();}byte[] bytes = baos.toByteArray();// 确定写出文件的位置try {// 建立输出字节流FileOutputStream fos = new FileOutputStream(file);// 用FileOutputStream 的write方法写入字节数组fos.write(bytes);System.out.println("写入成功");// 为了节省IO流的开销,需要关闭fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//下面代码是实现在浏览器中显示pdf文件 开始://设置发送到客户端响应的内容类型,浏览器会根据不同的MIME,调用不同的模块处理response.setContentType("application/pdf");ServletOutputStream out = response.getOutputStream();File pdf = null;BufferedInputStream buf = null;try {pdf = new File(filename);response.setContentLength((int)pdf.length());FileInputStream input = new FileInputStream(pdf);//带缓冲区的输入流//FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高buf = new BufferedInputStream(input);int readBytes = 0;while((readBytes=buf.read())!=-1) {out.write(readBytes);}} catch (Exception e) {System.out.println("文件没有找到");} finally {if(out!=null) {out.close();}if(buf!=null) {buf.close();}}//上面代码是实现在浏览器中显示pdf文件 结束:	}
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>JasperReports</groupId><artifactId>JasperReports02</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>JasperReports02 Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency>  <groupId>net.sf.jasperreports</groupId>  <artifactId>jasperreports</artifactId>  <version>5.6.0</version>  </dependency> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency><!-- 解决中文乱码 --><dependency> <groupId>com.lowagie</groupId><artifactId>itextasian</artifactId><version>1.5.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency></dependencies><build><finalName>JasperReports02</finalName></build>
</project>

web.xml

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>JasperServlet</servlet-name><display-name>JasperServlet</display-name><description></description><servlet-class>com.accord.servlet.JasperServlet</servlet-class></servlet><servlet><servlet-name>JasperServletDb</servlet-name><display-name>JasperServletDb</display-name><description></description><servlet-class>com.accord.servlet.JasperServletDb</servlet-class></servlet><servlet><servlet-name>JasperServletJavaBean</servlet-name><display-name>JasperServletJavaBean</display-name><description></description><servlet-class>com.accord.servlet.JasperServletJavaBean</servlet-class></servlet><servlet><servlet-name>JasperServletJavaBeanGroup</servlet-name><display-name>JasperServletJavaBeanGroup</display-name><description></description><servlet-class>com.accord.servlet.JasperServletJavaBeanGroup</servlet-class></servlet><servlet><servlet-name>JasperServletTable</servlet-name><display-name>JasperServletTable</display-name><description></description><servlet-class>com.accord.servlet.JasperServletTable</servlet-class></servlet><servlet><servlet-name>JasperServletChart</servlet-name><display-name>JasperServletChart</display-name><description></description><servlet-class>com.accord.servlet.JasperServletChart</servlet-class></servlet><servlet><servlet-name>JasperServletChart02</servlet-name><display-name>JasperServletChart02</display-name><description></description><servlet-class>com.accord.servlet.JasperServletChart02</servlet-class></servlet><servlet><servlet-name>JasperServletCh</servlet-name><display-name>JasperServletCh</display-name><description></description><servlet-class>com.accord.servlet.JasperServletCh</servlet-class></servlet><servlet><servlet-name>JasperServletMul</servlet-name><display-name>JasperServletMul</display-name><description></description><servlet-class>com.accord.servlet.JasperServletMul</servlet-class></servlet><servlet-mapping><servlet-name>JasperServlet</servlet-name><url-pattern>/JasperServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletDb</servlet-name><url-pattern>/JasperServletDb</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletJavaBean</servlet-name><url-pattern>/JasperServletJavaBean</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletJavaBeanGroup</servlet-name><url-pattern>/JasperServletJavaBeanGroup</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletTable</servlet-name><url-pattern>/JasperServletTable</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletChart</servlet-name><url-pattern>/JasperServletChart</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletChart02</servlet-name><url-pattern>/JasperServletChart02</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletCh</servlet-name><url-pattern>/JasperServletCh</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JasperServletMul</servlet-name><url-pattern>/JasperServletMul</url-pattern></servlet-mapping>
</web-app>

浏览器访问如下:

以上就完成了:

这篇关于Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146940

相关文章

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA