Java使用JasperReports绘制模板并生成PDF

目录

一、Jasper下载地址

二、准备工作

   1.创建一个工作区

     2.编辑器结构

    3.理解模板设计区域中元素分组的作用

 三、绘制一个K-V表格


一、Jasper下载地址

Jaspersoft® Studio | Jaspersoft Communityhttps://community.jaspersoft.com/project/jaspersoft-studio

二、准备工作

   1.创建一个工作区

   (1)File->New->Project

   (2)右键test文件夹->New->Jasper Report ,选择模板并命名

   2.编辑器结构

   3.理解模板设计区域中元素分组的作用

模板元素分组详解:Jasperreport+studio设计报表教程(六)--模板元素详解/分组_壹只野生程序猿的博客-CSDN博客转自: https://blog.csdn.net/pigdreams/article/details/59676769 上节已经介绍了如何用实体类集合来填充报表,下载demo传送门 本节主要讲解模板设计中如何放置模板元素达到我们想要的效果,涉及到模板元素的使用,如detail,column header等,下面将一一讲解outline中各个自带元素的使用,其实...https://blog.csdn.net/Black_PL/article/details/82588015

 三、绘制一个K-V表格

(1)新建一个模板文件,删除不需要的元素分组,留下Title, Detail1两部分。

(2)右上方组件区域拖拽一个Static Text到Title分组中。

        双击Static Text修改文本内容。

        右下角组件属性中添加边框,修改字体、大小、居中等属性。

        调整文本框大小,将文本框拖拽到合适的位置。

(3)再添加一个Static Text到Detail1分组中。

 

(4)添加一个K-V变量。

        左下角右键Parameters->create parameter

        点击新增的Parameter1,在右侧属性栏中修改变量名为name,类型默认为String。

        从左侧将修改好后的name拖拽至Detail1中。

(5)以同样方法创建出其他方格,调整位置。

 (6)添加图片

        从组件栏中拖拽一个Image组件到Detail1中。

选择默认的No image

添加一个Parameters变量,命名为image,点击class右侧的 … ,输入java.io.inputStream,设置image变量的属性为字节流。

 点击图片,image->Expression设置为:$P{image}

 在java填入模板时,key为image,value为new FileInputStream(filePath)

(7)完整模板

 (8)使用Java填充数据并导出成PDF文件。

        将生成的模板复制到自定义的路径下,这里放在D盘根目录。

pom依赖:

<!-- jasper 模板转PDF文件 -->
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.20.0</version>
</dependency>

PDFUtil.java:


/**
* 对table模板填充数据并生成PDF
* @throws Exception
*/
public static void createTable() throws Exception {
    //模板文件路径
    String jrxmlPath = "D:\\test.jrxml";
    //模板编译后文件路径
    String jasperPath = "D:\\test.jasper";
    if (!new File(jasperPath).exists()){
        //编译模板
        JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
    }
    //定义一个map,用来保存模板中parameters的变量
    Map<String, Object> paramters = new HashMap<String, Object>();
    //构造模板数据
    paramters.put("name", "pdf");
    paramters.put("ID", "001");
    paramters.put("department", "IT研发部");
    //图片路径
    String imagePath = "D:\\1.png";
    //将图片定义为字节流,放入map中
    InputStream is = new FileInputStream(imagePath);
    paramters.put("image", is);
    //填充数据---使用JavaBean数据源方式填充
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,paramters,new JREmptyDataSource());
    //输出文件
    String pdfPath = "D:\\test.pdf";
    JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
    is.close();
}

(9)JasperReport不支持中文,需要指定字体路径。

        在C:\Windows\Fonts目录下,复制需要的字体文件到Java项目的resource\Fonts目录下,并修改后缀为 .TTF。

jasperreports_extension.properties

# JasperReports字体配置的工厂
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
# 指定字体配置的位置
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml

fonts.xml

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <!--  name 的值要与模板字体名字保持一致  -->
    <fontFamily name="宋体">
        <normal>
            <ttf>fonts/STSong.TTF</ttf>
            <svg>fonts/STSong.TTF</svg>
            <eot>fonts/STSong.TTF</eot>
            <woff>fonts/STSong.TTF</woff>
        </normal>
        <bold>fonts/STSong.TTF</bold>
        <italic>fonts/STSong.TTF</italic>
        <boldItalic>fonts/STSong.TTF</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts/>
    </fontFamily>
</fontFamilies>

 main方法:

    public static void main(String[] args) throws Exception {
        PDFUtil.createList();
    }

生成PDF文件。

四、绘制一个数组表格

(1)新建一个模板文件,保留Title, Column Header, Detail1元素分组,其余删除。

(2)添加一个Static Text到Title分组中。(标题)

(3)添加Fields变量

       左下角变量栏中,右键Fields->Create Field,修改变量名

       同样的方法创建出其他表头数据

(4)将Fields中的三个变量拖拽到Detail1中,会自动在Column Header中生成对应的表头,修改表头内容,并调整位置。

        注意!

        表头下边栏需要紧贴Column Header分组的底部,表格数据的上下边分别紧贴Detail1分组的顶部和底部。建议先调整位置,大小,再添加表格边框。

        否则生成出来的表格会出现分离的现象,行与行之间会有空白。

(8)使用Java填充数据并导出成PDF文件。

        将生成的模板复制到自定义的路径下,这里放在D盘根目录。

PDFUtil.java


public static void createList() throws Exception {
    String jrxmlPath = "D:\\test.jrxml";
    String jasperPath = "D:\\test.jasper";
    if (!new File(jasperPath).exists()){
        //编译模板
        JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
    }
    //创建模拟的map数组
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    for (int i=1;i<=5;i++) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id", "" + i);
        map.put("name", "用户" + i);
        map.put("date", "日期" + i);
        list.add(map);
    }
    /* 也可以使用对象数组的方式填入模板
    List<User> list = new ArrayList<User>();
    for (int i=1; i<=5; i++){
        User user = new User(""+i, "用户"+i, "日期"+i);
        list.add(user);
    }
    */
    //填充数据---使用JavaBean数据源方式填充
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, null, new JRBeanCollectionDataSource(list));
    //输出文件
    String pdfPath = "D:\\YZJ\\XM\\ExectToPdf\\JasperReportsResource\\test.pdf";
    JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
}

五、Jasper导出为PDF时字体加粗不生效

        这个问题还没有解决,欢迎各位大佬留言指教。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值