1. 程式人生 > 其它 >SpringBoot整合jasperreport實現列印功能

SpringBoot整合jasperreport實現列印功能

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 &

一切都是最好的安排。