SpringBoot整合jasperreport實現列印功能
阿新 • • 發佈:2021-12-20
1.jaspersoft studio工具下載地址
2.工具使用方法檢視以下連結
3.將工具編譯後的.jasper檔案放到SpringBoot專案的resources/templates下
4.引入需要的jar
<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.18.1</version> <exclusions> <exclusion> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> <exclusion> <artifactId>commons-beanutils</artifactId> <groupId>commons-beanutils</groupId> </exclusion> <exclusion> <artifactId>commons-collections</artifactId> <groupId>commons-collections</groupId> </exclusion> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.11</version> </dependency> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports-fonts</artifactId> <version>6.18.1</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-pdfa</artifactId> <version>5.5.0</version> </dependency>
ps:jasperreports 、jasperreports-fonts這兩jar的版本取決於使用的jaspersoft studio工具的版本(一定要一致,否則可能出現型別轉換異常)
5.pom檔案配置
<resource> <targetPath>${project.build.directory}/classes</targetPath> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/*.jasper</exclude> <exclude>**/*.jrxml</exclude> </excludes> </resource> <resource> <targetPath>${project.build.directory}/classes</targetPath> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.jasper</include> <include>**/*.jrxml</include> </includes> </resource>
<plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.4</version> <configuration> <encoding>${project.build.sourceEncoding}</encoding> <delimiters> <delimiter>$</delimiter> <delimiter>@</delimiter> </delimiters> <useDefaultDelimiters>false</useDefaultDelimiters> <outputDirectory>${basedir}/target/classes/</outputDirectory> <nonFilteredFileExtensions> <!-- 需要過濾掉不需要編碼的檔案,不對其進行統一編碼 --> <nonFilteredFileExtension>woff</nonFilteredFileExtension> <nonFilteredFileExtension>woff2</nonFilteredFileExtension> <nonFilteredFileExtension>eot</nonFilteredFileExtension> <nonFilteredFileExtension>ttf</nonFilteredFileExtension> <nonFilteredFileExtension>svg</nonFilteredFileExtension> <nonFilteredFileExtension>xlsx</nonFilteredFileExtension> <nonFilteredFileExtension>xls</nonFilteredFileExtension> <nonFilteredFileExtension>docx</nonFilteredFileExtension> <nonFilteredFileExtension>doc</nonFilteredFileExtension> <nonFilteredFileExtension>pdf</nonFilteredFileExtension> <nonFilteredFileExtension>jasper</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin>
ps:配置要有,否則可能會出現io異常
6.服務程式碼,我這裡使用的是map傳參的方式
//引入jasper檔案
ClassPathResource resource = new ClassPathResource("templates/collate.jasper");
try {
//檔案輸入流的兩種獲取方式
// FileInputStream fis = new FileInputStream(resource.getFile());
InputStream inputStream = resource.getInputStream();
Map<String, Object> map = new HashMap<>();
map.put("userName","zhangsan");
map.put("pass","123456")
/**檢視底層程式碼發現JasperFillManager.fillReport(inputStream, map,new JREmptyDataSource())
*中有呼叫(JasperReport) JRLoader.loadObject(inputStream)所以在這裡我注掉了
*如果要使用(JasperReport) JRLoader.loadObject(inputStream)該方法
*fillReport方法的引數改為JasperFillManager.fillReport(jasperReport, map,new JREmptyDataSource())
*/
// JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
//將資料來源傳遞collate.jasper進行資料拼裝
//fillReport介面就是處理資料和.jasper檔案互動的方法
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, map,new JREmptyDataSource());
//呼叫列印方法
JasperPrintManager.printReport(jasperPrint,true);
} catch (Exception e) {
e.printStackTrace();
}
引數解釋:
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, map,new JREmptyDataSource());
//引數1輸入流,即讀取的檔案
//引數2資料map集合
//引數3資料來源,我這裡使用的是map傳參所有資料來源給的空資料來源物件,必須要有資料來源物件
//也可以使用資料來源的方式呼叫,map給個空的hasmap即可,資料來源即jdbc連線
7.專案設定
如果是在linux系統執行可以使用 nohup java -Djava.awt.headless=false -jar xxx.jar >catalina.out 2>&1 &