接着上一次所說的,沒看過的可跳轉
Jasper(1)——入門
第一階段:初步導出PDF
Jasper報表設計
點選 Static Text,并拖動到 title 位置
然後輕按兩下此框,根據需要修改,可看下圖
修改好後可以調一下藍線(各個band的高度)或者如圖所示
或者如下圖修改
接着Page Header我随便弄了點中文,跟title差不多
在弄Column Header和Detail部分之前,先做點東西~
outline視圖,右鍵field -> Create Field
你會看到如下圖的亞子
比如我這個field是id,類型為Integer,看String是不符的,是以如下圖操作
這樣,id列名就創好啦~接下來如法炮制,建立name和school列名,兩者都是String類型
接下來,我們把它們拖動到Detail部分,然後慢慢調整弄整齊
PS:拖到Detail的時候,Column Header也對應有一個框(Static Text)!
其實,看到圖中,是否會有問“$F{id}”是啥意思?
其實Detail的框是Text Field,輕按兩下一看,如圖
Column Footer我就随便寫了哈,不展示了
Page Footer一般是寫頁碼之類的,我就用個函數,如下圖所示
Summary部分我這邊加一個入參,這個入參建立參考上面的field即可
這樣一個報表就完成啦~可以預先浏覽
這裡就是對應該xml的源碼
編譯該檔案
這樣設計報表部分完成!
Java代碼導出部分
本次我用Springboot來進行pdf導出
檔案目錄大概是這樣
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>jasperdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.1</version>
<exclusions>
<exclusion>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
<version>0.9.7.309-JS-3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jfree/jcommon -->
<dependency>
<groupId>jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jfree/jfreechart -->
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
本次我将用模拟資料來示範,建立一個Student類
package com.copa.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @author copa
* @createDate 2021-07-25 21:51
* @function
*/
@Data
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private String school;
}
controller
package com.copa.controller;
import com.copa.domain.Student;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* @author copa
* @createDate 2021-07-25 21:02
* @function 導出pdf
*/
@RestController
public class TestController {
@RequestMapping(value = "/pdf1")
public void pdf1(Map<String, Object> parameters,
HttpServletResponse response) throws IOException {
ServletOutputStream os = response.getOutputStream();
try {
ArrayList<Student> list = new ArrayList<>();
for (int i = 1; i <= 40; i++) {
list.add(new Student(i, "copa" + i, i <= 20 ? "一中" : "二中"));
}
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
parameters = parameters == null ? new HashMap<>() : parameters;
parameters.put("summary", "我是summary~");
ClassPathResource resource = new ClassPathResource("jasper/demo1.jasper");
response.setContentType("application/pdf");
InputStream jasperStream = resource.getInputStream();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parameters, dataSource);
JasperExportManager.exportReportToPdfStream(jasperPrint, os);
} catch (JRException e) {
e.printStackTrace();
} finally {
os.flush();
}
}
}
那麼,啟動項目,檢視效果
http://localhost:8080/pdf1
看起來…好像沒邊框很别扭,那麼我們傳回去加邊框
重新編譯,覆寫檔案,再次嘗試~
這樣,邊框就出來了~但是,有沒有看到有些内容沒顯示的o(╥﹏╥)o
這是…中文的問題…因為Jasper它沒考慮到中文,檢視它的源碼可知
第二階段:解決中文問題
首先,從網上找字型,比如下圖
然後這裡添加字型
這樣就添加好字型了,然後給顯示中文的都換上這個字型
然後編譯并覆寫
在java代碼這一塊,建立下圖幾個檔案
ttf檔案是你在報表設計時用到的字型檔案
font.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="是微軟雅黑吖">
<normal>jasper/fonts/msyh.ttf</normal>
<bold>jasper/fonts/msyh.ttf</bold>
<italic>jasper/fonts/msyh.ttf</italic>
<boldItalic>jasper/fonts/msyh.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'是微軟雅黑吖', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'是微軟雅黑吖', Arial, Helvetica, sans-serif</export>
</exportFonts>
</fontFamily>
</fontFamilies>
jasperreports_extension.properties
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.dejavu=jasper/fonts/fonts.xml
添加完成後,再次運作
http://localhost:8080/pdf1
這樣就成功啦~
底部也對應顯示~
這樣導出PDF報表就完成啦~
O(∩_∩)O~
項目位址:https://gitee.com/copaa/jasperdemo
導航欄:
Jasper(3)——制作圖表報表
Jasper(4)——制作分組報表
Jasper(5)——制作父子報表
Jasper(6)——小技巧& 各種bug(有緣再補充)