Jasperreports+jaspersoft studio学习教程(二)- 使用Parameters属性传入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>
上一篇: 有效数字