Jasperreports+jaspersoft studio学习教程(二)- 使用Parameters属性传入Map数据源填充报表并解决中文不显示问题

标签: Map数据源填充报表

转载:https://blog.csdn.net/shiyun123zw/article/details/79166448

2.1 设计报表模板

2.1.1 在Studio中新建一个报表模板(DemoReport2),删除不需要的Band,Column Header,ColumnFooter,Summary,Background,在outline界面中选中要删除Band右键-> delete,即可删除。

 

 

2.1.2 在outline面板中找到Parameters,右键 -> Create Parameter,新建一个Parameter(生成一个Paramerter1)

 

 

 

 2.1.3 右键 Paramete1 -> Show Properties. 设置Name为title、Class为java.lang.String.

 

 

 

用同样的方法生成,date,name,age,dept,gender的parameter项,属性全为java.lang.String

 

 

2.1.4 利用组件面板(Palette)中的组件设计模板。

选取Static Text组件拖动到Detail Band中,写入“NAME:”,可以设置字体,大小。

 

 

 

点击 “NAME”显示Properties.在Appearance中可以设置组件的宽高,和组件在模板上的位置。

 

 

在Properties.的Borders中可以设置组件的边框:

 

 

将 outline面板中Parameters下的name,拖动到Detail 面板中,通过修改该组件的Properties属性,设置位置和大小,设置边框。

 

 

2.1.5 通过以上步骤,设计其他parameter属性,设计报表模板如下:

 

 

2.1.6 保存模板,并Preview

 

 

结果如图:

 

 

2.2 通过Java程序,使用Map作为数据源生成报表

 

2.2.1 新建web项目,在下载的jasperreport包的\jasperreports-6.4.1\dist目录下,找到三个jar包引入到项目中。

 

 

 

 

2.2.2 新建servlet,(这里为JasperServlet),doGet内容如下:

省略:代码下面有全部的

在这里可以发现,parametes作为数据源在程序中是一个Map集合。对应模板中Paramters,并且map的key与模板中Parameters属性的名字一致,map的value的数据类型与模板Parameters属性设置的数据类型保持一致。所以,在设计模板时要注意,Parameters命名不能重复,且设置数据类型时也要留心。

.jsaper文件:由JRXML模板编译生成的二进制文件,用于代码填充数据

在studio中找到.jrxml文件右键 -> Compile Report ,即可生成.Jasper文件,

将生成的DemoReport2.jasper文件放入WebRoot下新建的jasper文件夹中。

2.2.3 报表的生成流程

 

2.2.4 将web工程放入tonmcat中,启动并访问。

 

 

访问成功了,但是中文却并未显示也解决了。

代码如下:

该项目是Maven项目:

项目结构图如下:

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>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>

JasperServlet.java

package com.accord.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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.JRRuntimeException;
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.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;

public class JasperServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public JasperServlet() {
        super();
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	//map作为报表数据源
    	Map<String,Object> parameters = new HashMap<String, Object>();
    	parameters.put("Parameter1", "李思思");
    	parameters.put("Parameter2", "26");
    	
    	ServletContext context = this.getServletConfig().getServletContext(); 	
		
		try {
			//JasperCompileManager.compileReportToFile("E:/report/DbReport.jrxml");
			JasperCompileManager.compileReportToFile(context.getRealPath("/jasper/DemoReport02.jrxml"));
		} catch (JRException e1) {
			e1.printStackTrace();
		}//编译jrxml文件,生成jasper文件

		File reportFile = new File(context.getRealPath("/jasper/DemoReport02.jasper"));
		if (!reportFile.exists())
			throw new JRRuntimeException("FileWebappReport.jasper "
					+ "not found. The report design must be compiledfirst.");
		FileInputStream isRef = new FileInputStream(reportFile);
		ServletOutputStream sosRef = response.getOutputStream();
		try {
			JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters,new JREmptyDataSource());
			response.setContentType("application/pdf");
		} catch (Exception e) {
		}finally{
			sosRef.flush();
			sosRef.close();
		}
		
	}

}

DemoReport02.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="DemoReport02" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="80a35798-9752-47fd-b0e3-a07b41b5659f">
	<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
	<parameter name="Parameter1" class="java.lang.String"/>
	<parameter name="Parameter2" class="java.lang.String"/>
	<queryString>
		<![CDATA[]]>
	</queryString>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="79" splitType="Stretch"/>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch"/>
	</pageHeader>
	<detail>
		<band height="79" splitType="Stretch">
			<textField>
				<reportElement x="382" y="10" width="100" height="30" uuid="7e7e2368-44e6-42eb-a753-8bcc9e2bafd7"/>
				<textElement>
				   <font fontName="宋体" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{Parameter2}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement x="281" y="10" width="101" height="16" uuid="5b87c7e4-73fd-4ef1-bc23-3a35d9785860"/>
				<box>
					<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
				</box>
				<textElement>
				   <font fontName="宋体" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<text><![CDATA[年龄:]]></text>
			</staticText>
			<textField>
				<reportElement x="180" y="6" width="100" height="30" uuid="c21f6fca-dd97-4ce9-9186-d9144abf173c"/>
				<textElement>
				   <font fontName="宋体" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{Parameter1}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement x="80" y="10" width="100" height="16" uuid="914d0eff-4a06-438f-8010-c80f2c52d77b"/>
				<box>
					<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
				</box>
				<textElement>
				   <font fontName="宋体" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<text><![CDATA[姓名:]]></text>
				
			</staticText>
		</band>
	</detail>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
</jasperReport>

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-mapping>
  	<servlet-name>JasperServlet</servlet-name>
  	<url-pattern>/JasperServlet</url-pattern>
  </servlet-mapping>
</web-app>

访问路径:http://localhost:8080/JasperReports02/JasperServlet

我的解决中文不显示和乱码问题方案如下:


<textElement>
   <font fontName="宋体" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</textElement>

 

 

 

 

 

 

 

 

原文链接:加载失败,请重新获取