zoukankan      html  css  js  c++  java
  • PDF技术之-jasperreports的使用

    使用过程中会出现中文没有显示的问题。

    解决方法:

    在设置jasper文件的过程中设置其中的中文的字体。我选择的是华文宋体。

    设置好字段的中文的字体样式。就把这个jasper文件放到我的springboot项目中。

    我项目的格式为:

     这里有从网上找到的stsong.TTF为华文宋体的样式。自己配置的fonts.xml字体配置。

    其中

    fonts.xml配置为:

    <?xml version="1.0" encoding="UTF-8"?>
    <fontFamilies>
          <!--<fontFamily name="Lobster Two">-->
          <!--<normal>lobstertwo/LobsterTwo-Regular.otf</normal>-->
          <!--<bold>lobstertwo/LobsterTwo-Bold.otf</bold>-->
          <!--<italic>lobstertwo/LobsterTwo-Italic.otf</italic>-->
          <!--<boldItalic>lobstertwo/LobsterTwo-BoldItalic.otf</boldItalic>-->
          <!--<pdfEncoding>Identity-H</pdfEncoding>-->
          <!--<pdfEmbedded>true</pdfEmbedded>-->
          <!--<!–-->
          <!--<exportFonts>-->
          <!--<export key="net.sf.jasperreports.html">'Lobster Two', 'Times New Roman',
    Times, serif</export>-->
          <!--</exportFonts>-->
          <!--–>-->
          <!--</fontFamily>-->
          
        <fontFamily name="华文宋体">    
            <normal>stsong/stsong.TTF</normal>    
            <bold>stsong/stsong.TTF</bold>   
            <italic>stsong/stsong.TTF</italic> 
            <boldItalic>stsong/stsong.TTF</boldItalic>    
            <pdfEncoding>Identity-H</pdfEncoding>
            <pdfEmbedded>true</pdfEmbedded>
            <exportFonts>  
                <export key="net.sf.jasperreports.html">'华文宋体', Arial, Helvetica, sans-serif</export>
                <export key="net.sf.jasperreports.xhtml">'华文宋体', Arial, Helvetica, sans-serif</export>
            </exportFonts>
            <!--<locales>
                  <locale>en_US</locale>
                  <locale>de_DE</locale>
                </locales>
             -->
              
        </fontFamily>
    </fontFamilies>

    jasperreports_extension.properties配置文件为:

    net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
    net.sf.jasperreports.extension.simple.font.families.lobstertwo=stsong/fonts.xml

    java的代码:

     传入parameters值的时候,在设置jasper文件的parameters的值就是使用map传入对应的值的。这里不是filed的,第三个参数才是表格字段filed的。

    @RequestMapping(value = "/testJaper01", method = RequestMethod.GET)
        public void createHtml(HttpServletResponse response, HttpServletRequest request) throws IOException {
            //引入jasper文件
            ClassPathResource resource = new ClassPathResource("templates/parameters.jasper");
            FileInputStream fis = new FileInputStream(resource.getFile());
            ServletOutputStream outputStream = response.getOutputStream();
            //模板的参数名称和Map的key一致的
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("id", "111");
            map.put("username", "zs张三");
            map.put("companyName", "caicai公司");
            map.put("mobile", "15222222222");
            try {
                //这个map设置的就是parameters的值,并非是filed的
                JasperPrint print = JasperFillManager.fillReport(fis, map, new JREmptyDataSource());
                /*导出PDF*/
                JasperExportManager.exportReportToPdfStream(print, response.getOutputStream());
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                outputStream.flush();
                outputStream.close();
                fis.close();
            }
        }

    使用jdbc连接数据库拿到数组渲染到表格

    @GetMapping("/testJaper02")
        public void createPDF(HttpServletResponse response, HttpServletRequest request) throws IOException {
            //1.引入文件
            ClassPathResource resource = new ClassPathResource("templates/testjdbc.jasper");
            FileInputStream fileInputStream = new FileInputStream(resource.getFile());
            //2.创建jasperPrint,向jasper文件中填充数据
            ServletOutputStream outputStream = response.getOutputStream();
            try {
                //这里由于是使用到了jdbc直接连接上数据库,所有这个map不存入任何值。
                HashMap<String, Object> parameters = new HashMap<String, Object>();
                JasperPrint print = JasperFillManager.fillReport(fileInputStream, parameters, getConnection());
                //3.将jasperPrint以PDF的形式输出
                JasperExportManager.exportReportToPdfStream(print, outputStream);
                // response.setContentType("application/pdf");
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                outputStream.flush();
                outputStream.close();
                fileInputStream.close();
            }
        }
    
        public Connection getConnection() {
            Connection connection = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3306/ssm";
                connection = DriverManager.getConnection(url, "root", "root");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return connection;
        }

    使用javabean来渲染数据

     @GetMapping("/testjavaBean")
        public void createPDF2(HttpServletRequest request, HttpServletResponse response) throws IOException {
            ClassPathResource resource = new ClassPathResource("templates/testJavaBean.jasper");
            FileInputStream fis = new FileInputStream(resource.getFile());
            ServletOutputStream os = response.getOutputStream();
            try {
                HashMap<String, Object> map = new HashMap<String, Object>();
               /* ArrayList<User> arrayList = new ArrayList<User>(10);
                for (int i = 0; i < 10; i++) {
                    User user = new User(i, "m00" + i, "小" + i, "别名" + i, "pic" + i, "状态" + i);
                    arrayList.add(user);
                }*/
                List<User> arrayList = userService.findAllUser();
                JRBeanCollectionDataSource ds= new JRBeanCollectionDataSource(arrayList);
                /**1.jasper文件流
                 * 2.参数列表
                 * 3.JRBeanCollectionDataSource*/
                JasperPrint jasperPrint = JasperFillManager.fillReport(fis, map, ds);
                JasperExportManager.exportReportToPdfStream(jasperPrint,os);
                response.setContentType("application/pdf");
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                os.flush();
            }
    
    
        }

    在返回给前端的问题:

    一种是以pdf文件显示或者导出

    在浏览器显示的输出配置;

    /** * 参数一:封装好模板好数据的JasperPrint对象 * 参数二:输出的位置 */
    JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());

    下载的配置

    /** 参数:封装好模板好数据的JasperPrint对象
    * 参数二:输出的位置*/
    
    //设置下载框响应头
    response.setHeader("Content-Disposition","attachment;filename=export.pdf");  //参数一是响应头,参数而,是附件和下载后的文件名
    JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());  //这一步同上

    https://wenku.baidu.com/link?url=HrWPdhA-kf-dCDnoak9kfYaB7PzoYj1foufQ0kYPfVEcte6s5qkTh5ENhqDZhnknzVKwMqdzRMKZyagPYlnwdXgTt7fS_aSmPA4FLiZoqEC

  • 相关阅读:
    ZeptoLab Code Rush 2015
    UVa 10048 Audiophobia【Floyd】
    POJ 1847 Tram【Floyd】
    UVa 247 Calling Circles【传递闭包】
    UVa 1395 Slim Span【最小生成树】
    HDU 4006 The kth great number【优先队列】
    UVa 674 Coin Change【记忆化搜索】
    UVa 10285 Longest Run on a Snowboard【记忆化搜索】
    【NOIP2016提高A组模拟9.28】求导
    【NOIP2012模拟10.9】电费结算
  • 原文地址:https://www.cnblogs.com/fengyangcai/p/14521662.html
Copyright © 2011-2022 走看看