使用jaspersoft工具与Springboot实现生成pdf文件

本文详细介绍了如何使用Jaspersoft Studio创建一个简单的模板,包括设置静态文本、动态参数和导入JSON数据。在后端,通过添加相关依赖并配置Maven,实现了模板的使用。最后展示了如何在Java代码中填充数据并打印报告,提供了一个具体的`printRepair`方法示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、下载和使用jaspersoft studio工具(直接下载就可以用)去新建一个简单的模板

在这里插入图片描述
在这里插入图片描述

2、设置静态文本

在这里插入图片描述
3、设置动态参数
在这里插入图片描述
在这里插入图片描述

4、然后导入本地的一个json文件(这个文件就文件格式如下)

{
	"c_repair_no":"",
	"c_repair_code",""
}

在这里插入图片描述
在这里插入图片描述
5、编译好的文件放到 resources/template目录下
在这里插入图片描述

5、前面都是编辑模板,现在是后端开始用这个模板

导入依赖
        <!-- 单证依赖-->
        <dependencies>
        <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>
        <dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy</artifactId>
        </dependency>
        <dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy-agent</artifactId>
            <scope>test</scope>
        </dependency>
        </dependencies>
           <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <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>
        </plugins>
        <resources>
            <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>
        </resources>
    </build>


6、使用

    @Override
    public void printrepair(RepairVo input) {
        ClassPathResource resource = new ClassPathResource("templates/baoxiu.jasper");
        try {
            //文件输入流的两种获取方式
//			FileInputStream fis = new FileInputStream(resource.getFile());
            InputStream inputStream = resource.getInputStream();
            Map<String, Object> map = new HashMap<>();
            map.put("c_repair_person",input.getC_repair_person());
            map.put("c_repair_no",input.getC_repair_no());
            map.put("c_repair_code",input.getC_repair_code());
            map.put("c_device_name",input.getC_device_name());
            map.put("c_cell_phone",input.getC_cell_phone());
            map.put("c_repair_date",input.getC_repair_date());
            map.put("c_repair_content",input.getC_repair_content());
            //将数据源传递collate.jasper进行数据拼装
            //fillReport接口就是处理数据和.jasper文件交互的方法
            JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, map,new JREmptyDataSource());
            //调用打印方法
            JasperPrintManager.printReport(jasperPrint,false);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

7、效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值