天天看點

PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例

文章目錄

    • 簡介
    • 1. Maven相關jar包
    • 2. 在報表中顯示中文
      • 2.1 修改jar檔案
      • 2.2 把檔案字型拷貝到這裡
    • 3. 使用JasperReport制作報表
    • 4. 把檔案複制到WEB-INF下
    • 5. 生成條形碼工具類
    • 6. 生成條形碼
    • 7. 生成PDF
    • 8. 效果圖

簡介

使用SSM技術內建 JasperReport報表+barcode4j條形碼

PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例

1. Maven相關jar包

<!--JsperReport-->
     <dependency>
         <groupId>net.sf.jasperreports</groupId>
         <artifactId>jasperreports</artifactId>
         <version>6.17.0</version>
     </dependency>
     <dependency>
         <groupId>org.olap4j</groupId>
         <artifactId>olap4j</artifactId>
         <version>1.2.0</version>
     </dependency>
     <dependency>
         <groupId>com.lowagie</groupId>
         <artifactId>iText</artifactId>
         <version>2.1.7</version>
     </dependency>
     <!--字型 需要手動修改jar包-->
     <dependency>
         <groupId>net.sf.jasperreports</groupId>
         <artifactId>jasperreports-fonts</artifactId>
         <version>6.17.0</version>
     </dependency>
     <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
         <version>3.8.1</version>
     </dependency>
     <!--條形碼-->
     <dependency>
         <groupId>net.sf.barcode4j</groupId>
         <artifactId>barcode4j</artifactId>
         <version>2.1</version>
     </dependency>
           

2. 在報表中顯示中文

在jasperreport中顯示中文需要使用jasperreports-fonts 并修改jar檔案

2.1 修改jar檔案

以華文宋體為例,我們需要準備華文宋體的字型樣式

百度雲: https://pan.baidu.com/s/1b5YN1ly_IkHMWk0nxkf1JQ

提取碼:szy1

打開jasperreports-fonts-6.17.0.jar

PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例
把相關檔案放入jar中 切記jar包不用解壓 直接把檔案放進去
PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例
<fontFamily name="華文宋體">
    <normal>net/sf/jasperreports/fonts/dejavu/stsong.TTF</normal>
    <bold>net/sf/jasperreports/fonts/dejavu/stsong.TTF</bold>
    <italic>net/sf/jasperreports/fonts/dejavu/stsong.TTF</italic>
    <boldItalic>net/sf/jasperreports/fonts/dejavu/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>
           
PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例

2.2 把檔案字型拷貝到這裡

PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例

此時解決中文字型的問題

jar包百度雲 支援華文宋體

百度雲: https://pan.baidu.com/s/11hHNd19iY0DCPwxf_BPDlg

提取碼:szy1

3. 使用JasperReport制作報表

PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例

4. 把檔案複制到WEB-INF下

PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例

5. 生成條形碼工具類

package org.express.utils;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;

public class DemoApplicationTests {
    /**
     * 生成檔案
     *
     * @param msg
     * @param path
     * @return
     */
    public static void generateFile(String msg, String path) {
        //生成高度
        int height = 160;
        //生成寬度
        double width = UnitConv.in2mm(1.0f / height);
        //輸出流
        File file = new File(path);
        OutputStream out;
        try {
            out = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        Code39Bean c39 = new Code39Bean();
        // 設定屬性
        c39.setModuleWidth(width);
        c39.setWideFactor(2);
        // 輸出類型
        String format = "image/png";
        BitmapCanvasProvider canvas = new BitmapCanvasProvider(out, format, height, BufferedImage.TYPE_BYTE_BINARY, false, 0);

        // 生成圖檔
        c39.generateBarcode(canvas, msg);
        try {
            // 關閉流
            canvas.finish();
            System.out.println("ok...");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

           

6. 生成條形碼

//修改自己的位址
	String path = ResourceUtils.getURL("classpath:").getFile().toString()+"\\..\\..\\static\\upload\\"+expId+".png";
    //命名方式
    String msg = expId;
    //輸出
    DemoApplicationTests.generateFile(msg, path);
           

7. 生成PDF

@Override
public void expressRoport(ExpressPo expressPo, HttpServletResponse response) throws Exception {
    //1.擷取模闆檔案  擷取項目的更目錄
    File rootFile = new File(ResourceUtils.getURL("classpath:").getFile());
    File templateFile = new File(rootFile, "../pdf_template/expressWaybill.jasper");
    //TODO 2.準備資料庫的連結 資料庫查詢 需要更改自己的接口
    Express expressById = expressMapper.getExpressById(expressPo.getExpId());

    String expImages = expressById.getExpImages();
    expressById.setExpImages(rootFile+"\\..\\.."+expImages);

    //2.準備資料庫的連結
    Map<String, Object> params = EntityUtils.entityToMap(expressById);

    //将JasperPrint已PDF的形式輸出
    JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(templateFile),params,new JREmptyDataSource());

    //擷取輸出流
    ServletOutputStream outputStream = response.getOutputStream();
    //設定導入名稱
    String filename= "運單報表.pdf";
    //設定導出的字元編碼
    response.setContentType("application/pdf");
    response.setHeader("content-disposition","attachment:filename="+new String(filename.getBytes(),"ISO-8859-1"));
    //3.列印
    JasperExportManager.exportReportToPdfStream(jasperPrint,outputStream);
}
           

8. 效果圖

PDF報表操作05~~SSM整合JasperReport+barcode4j制作動态報表(資料庫互動)案例