java-spring PDF报表生成方式

https://www.bilibili.com/video/BV1Ty4y1a77U?p=1(经典IDEA版Java项目医疗实战-传智健康)

java常见的PDF形式报表导出一般有两种形式:

1.iText

    iText是用关于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML,Html文件转化为PDF文件。iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar路径,在程序中就可以使用iText类库了。

pom.xml:
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
</dependency>

实现:
    public static void main(String[] args) {
        try {
            Document document = new Document();
            pdfWrite.getInstance(document, new FileOutputStream("D:\\test.pdf"));
            document.open();
            document.add(new Paragraph("hello itext"));
            document.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

2. JasperReports

    JasperReports能转换PDF,HTML,或者XML格式,一般会结合Jaspersoft Studio(模板设计器)使用导出PDF报表。

pom.xml:
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.4.0</version>
        </dependency>

    创建jrxml文件,类似于framemark模板文件。(见下文)

    public void test(){
        String jrxmlPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jrxml";
        String jasperPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jasper";

        //编译模板
        JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);

        //构造数据
        HashMap paramters = new HashMap();
        paramters.put("reportDate","2021-06-16");
        paramters.put("company","xuyu");
        ArrayList<Map> list = new ArrayList<Map>();
        HashMap map1 = new HashMap();
        map1.put("name","xuyu");
        map1.put("address","xian");
        HashMap map2 = new HashMap();
        map2.put("name","xuyu");
        map2.put("address","xian");
        list.add(map1);
        list.add(map2);

        //填充数据
        JasperPath jasperPrint = JasperFileManager.fillReport(jasperPath,paramters,new JRBeanCollectionDataSource(list));

        //输出文件
        String pdfPath = "D:\\test.pdf";
        JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
    }
//基于数据库方式填充数据
    public void test1() throws ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/health",root,root);

        String jrxmlPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jrxml";
        String jasperPath = "D:\\ideaProjects\\...\\src\\main\\resources\\demo.jasper";

        //模板编译,编译为后缀为jasper的二进制文件
        JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);

        //构造数据
        Map paramters = new HashMap();
        paramters.put("company","xuyu");

        //填充数据
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,paramters,connection);

        //输出文件
        String pdfPath="D:\\test.pdf";
        JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
    }

    JasperReport原理:

        JRXML->Jasper->Jrprint->Exporter->PDF/HTML/XML

        JRXML:报表填充模板,本质是一个xml文件

        Jasper:由JRXML模板编译成的二进制文件,用于代码填充数据

        Jrprint:当用数据填充完Jasper后生成的对象,用于输出报表

        Exporter:报表输出的管理类,可以指定要输出的报表为何种格式

        PDF/HTML/XML:报表形式

    JasperReports到处pdf报表开发流程:

        1.制作报表模板

        2.模板编译

        3.构造数据

        4.填充数据

        5.输出文件

    模板设计器Jaspersoft Studio:

        为一个图形化的报表设计工具,可以非常方便的设计出PDF报表模板文件(其实就是一个xml文件),再结合JasperReports使用,就可以渲染出PDF文件。

        下载地址:https://community.jaspersoft.com/commounity-download

        具体的软件使用详见百度。

    结合JasperReports输出报表:

        使用Jaspersoft Studio设计好模板(一个使用JDBC数据源,一个使用JavaBean数据源方式进行数据填充)(见上面代码)后,结合JasperReports完成报表输出。

        注意:以上方式中文无法正常显示,需要修复:

        在Jaspersoft Studio中打开对应的jrxml文件,选中中文相关元素,统一将字体设置为“华文宋体”并将修改后的jrxml文件重新复制到项目中,字体需导入相关字体库

    在spring项目中使用JasperReports:

    1.把jrxml文件放到resources目录下

    2.导入maven坐标(见上面)

    3.将解决中文乱码的文件复制到resources目录下

@RestController
@RequestMapping("/report")
public class PDFController {
    @Autowired
    private ReportService reportService;

    //导出PDF文件
    @RequestMapping("/exportBusinessReport")
    public Result exportReportToPdfFile(HttpServletRequest request, HttpServletResponse response){
        try {
            //取出返回结果数据,准备将报表数据写入到PDF文件中
            Map<String, Object> result = reportService.getBusinessReportData();
            List<Map> hotSetmeal = (List<Map>) result.get("hotSetmeal");

            //动态获取模板文件绝对磁盘路径
            String jrxmlPath = request.getSession().getServletContext().getRealPath("template") + File.separator + "xxx.jrxml";
            String jasperPath = request.getSession().getServletContext().getRealPath("template") + File.separator + "xxx.jasper";

            //编译模板
            JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);

            //填充数据
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, result, new JRBeanCollectionDataSource(hotSetmeal));

            ServletOutputStream out = response.getOutputStream();
            response.setContentType("application/pdf");
            response.setHeader("content-Disposition", "attachment;filename=report.pdf");

            //输出文件
            JasperExportManager.exportReportToPdfStream(jasperPrint, out);
            return null;
        }catch (Exception e){
            e.printStackTrace();
            return new Result(false, MessageConstant.OPER_FAILD);
        }
    }
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java生成PDF报表并下载的示例代码: ```java import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; @Controller @RequestMapping("/pdf") public class PdfController { @RequestMapping(value = "/download", method = RequestMethod.GET) @ResponseBody public void download(HttpServletResponse response) throws IOException, DocumentException { // 设置文件名和文件类型 response.setHeader("Content-Disposition", "attachment;filename=test.pdf"); response.setContentType("application/pdf"); // 创建PDF文档对象 Document document = new Document(); OutputStream out = response.getOutputStream(); PdfWriter.getInstance(document, out); // 打开文档 document.open(); // 添加段落 document.add(new Paragraph("Hello World!")); // 关闭文档 document.close(); out.flush(); out.close(); } } ``` 以上代码使用了iText库来生成PDF文档,首先设置了文件名和文件类型,然后创建了PDF文档对象并打开文档,添加了一个段落,最后关闭文档并将其写入输出流中,实现了PDF报表生成和下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值