jasper生成动态报表

jasper生成动态报表

业务:客户点击链接(get请求),在页面显示报表。根据请求信息动态获取报表。
环境/工具:springboot ,IDEA编译器, TIBCO JasperSoft

TIBCO JasperSoft 下载地址(百度云)
链接:https://pan.baidu.com/s/12AE1be2NW_2zpGFtoN52_A
提取码:yin8

配置依赖
添加工具类
创建测试类
测试
下载Jaspersoft
绘制报表
生成jasper文件
修改jrxml
Step1 Maven依赖
<!--        <dependencies>-->
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.0.3</version>
        </dependency>
        <!--报表相关-->
        <dependency>
            <groupId>net.sf.ezmorph</groupId>
            <artifactId>ezmorph</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.7</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>

        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.0.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports-fonts</artifactId>
            <version>6.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-pdfa</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>2.0.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.9</version>
        </dependency>
<!--        //如果直接使用文中附出的工具类,该依赖虽然不会被调用,但是不加上会报错-->
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.2.2</version>
        </dependency>






<!--        <build><plugins>-->
		<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <!--<encoding>UTF-8</encoding>-->
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>p12</nonFilteredFileExtension>
                        <nonFilteredFileExtension>xls</nonFilteredFileExtension>
                        <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
                        <nonFilteredFileExtension>jrxml</nonFilteredFileExtension>
                        <nonFilteredFileExtension>jasper</nonFilteredFileExtension>
                        <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
Step 2 工具类

1.JasperHelper.java


import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.base.JRBaseReport;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.sql.Connection;
import java.util.Base64;
import java.util.Map;

@SuppressWarnings("deprecation")
public class JasperHelper {
    public static final String PRINT_TYPE = "print";
    public static final String PDF_TYPE = "pdf";
    public static final String EXCEL_TYPE = "excel";
    public static final String HTML_TYPE = "html";
    public static final String WORD_TYPE = "word";



    public static enum DocType {
        PDF, HTML, XLS, XML, RTF
    }
    @SuppressWarnings("rawtypes")
    public static JRAbstractExporter getJRExporter(DocType docType) {
        JRAbstractExporter exporter = null;
        switch (docType) {
            case PDF:
                exporter = new JRPdfExporter();
                break;
            case HTML:
                exporter = new JRHtmlExporter();
                break;
            case XLS:
                exporter = new JExcelApiExporter();
                break;
            case XML:
                exporter = new JRXmlExporter();
                break;
            case RTF:
                exporter = new JRRtfExporter();
                break;
        }
        return exporter;
    }





    public static String showPdf(String type1, String reportfile, Map parameters, JRDataSource conn, String type) throws Exception {
//        request.setCharacterEncoding("utf-8");
//        response.setCharacterEncoding("utf-8");
//        response.setContentType("text/html");
//        response.setContentType("application/pdf");
        JRAbstractExporter exporter = getJRExporter(JasperHelper.DocType.PDF);
        JasperPrint jasperPrint = JasperFillManager.fillReport(reportfile, parameters, conn);
//        request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
        exporter.exportReport();
        byte[] bytes = baos.toByteArray();
        File file = new File("/usr/local/src/huier-product/print/1.pdf");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(bytes);
        fos.close();
        //pdf转图片
        if(type1.equals("barcode")){
            PdfUtil.pdf2pngBarcode("/usr/local/src/huier-product/print","1");
        }else {
            PdfUtil.pdf2pngShunFeng("/usr/local/src/huier-product/print","1");
        }
//        PdfUtil.pdf2png("/usr/local/src/huier-product/print","1");
//        File image = new File("D:\\apache-tomcat-6.0.29\\imag\\1.png");
        String base = fileToBase64("/usr/local/src/huier-product/print/1.png");
        return base;
//        printUtil.drawImage("D:\\apache-tomcat-6.0.29\\imag\\1.jpg", type1);
    }

    public static String showPdf(JasperPrint jasperPrint) throws Exception {
        JRAbstractExporter exporter = getJRExporter(JasperHelper.DocType.PDF);
        JasperPrint jasperPrint1=jasperPrint;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint1);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
        exporter.exportReport();
        byte[] bytes = baos.toByteArray();
        File file = new File("/usr/local/src/huier-product/print/1.pdf");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(bytes);
        fos.close();
        String base = fileToBase64("/usr/local/src/huier-product/print/1.png");
        return base;
    }

    public static  String fileToBase64(String path) {
        String base64 = null;
        InputStream in = null;
        try {
            File file = new File(path);
            in = new FileInputStream(file);
            byte[] bytes = new byte[(int) file.length()];
            in.read(bytes);
            base64 = Base64.getEncoder().encodeToString(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return base64;
    }

    public static void showPdf(String defaultFilename, String reportfile, HttpServletRequest request, HttpServletResponse response, Map parameters, Connection conn) throws JRException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");
        response.setContentType("application/pdf");
        JRAbstractExporter exporter = getJRExporter(JasperHelper.DocType.PDF);
        JasperPrint jasperPrint = JasperFillManager.fillReport(reportfile, parameters, conn);
        request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint);
        OutputStream out = response.getOutputStream();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
        exporter.exportReport();
        out.flush();
    }


    public static void prepareReport(JasperReport jasperReport, String type) {
        /*
         * 如果导出的是excel,则需要去掉周围的margin
         */
        if ("excel".equals(type))
            try {
                Field margin = JRBaseReport.class
                        .getDeclaredField("leftMargin");
                margin.setAccessible(true);
                margin.setInt(jasperReport, 0);
                margin = JRBaseReport.class.getDeclaredField("topMargin");
                margin.setAccessible(true);
                margin.setInt(jasperReport, 0);
                margin = JRBaseReport.class.getDeclaredField("bottomMargin");
                margin.setAccessible(true);
                margin.setInt(jasperReport, 0);
                Field pageHeight = JRBaseReport.class
                        .getDeclaredField("pageHeight");
                pageHeight.setAccessible(true);
                pageHeight.setInt(jasperReport, 2147483647);
            } catch (Exception exception) {
            }
    }

    /**
     * 导出excel
     */
    public static void exportExcel(JasperPrint jasperPrint,
                                   String defaultFilename, HttpServletRequest request,
                                   HttpServletResponse response) throws IOException, JRException {
        /*
         * 设置头信息
         */
        response.setContentType("application/vnd.ms-excel");
        String defaultname = null;
        if (defaultFilename.trim() != null && defaultFilename != null) {
            defaultname = defaultFilename + ".xls";
        } else {
            defaultname = "export.xls";
        }

        response.setHeader("Content-Disposition", "attachment; filename=\""
                + URLEncoder.encode(defaultname, "UTF-8") + "\"");


        ServletOutputStream ouputStream = response.getOutputStream();
        JRXlsExporter exporter = new JRXlsExporter();

        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);

        exporter.setParameter(
                JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
                Boolean.TRUE); // 删除记录最下面的空行

        exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
                Boolean.FALSE);// 删除多余的ColumnHeader
        //
        exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
                Boolean.FALSE);// 显示边框
        exporter.exportReport();
        ouputStream.flush();
        ouputStream.close();
    }


    /**
     * 导出pdf,注意此处中文问题,
     *
     * 这里应该详细说:主要在ireport里变下就行了。看图
     *
     * 1)在ireport的classpath中加入iTextAsian.jar 2)在ireport画jrxml时,看ireport最左边有个属性栏。
     *
     * 下边的设置就在点字段的属性后出现。 pdf font name :STSong-Light ,pdf encoding :UniGB-UCS2-H
     */
    private static void exportPdf(JasperPrint jasperPrint,
                                  String defaultFilename, HttpServletRequest request,
                                  HttpServletResponse response) throws IOException, JRException {
        response.setContentType("application/pdf");
        String defaultname = null;
        if (defaultFilename.trim() != null && defaultFilename != null) {
            defaultname = defaultFilename + ".pdf";
        } else {
            defaultname = "export.pdf";
        }
        String fileName = new String(defaultname.getBytes("GBK"), "ISO8859_1");
        response.setHeader("Content-disposition", "attachment; filename="
                + fileName);
        ServletOutputStream ouputStream = response.getOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint, ouputStream);
        ouputStream.flush();
        ouputStream.close();
    }

    /**
     * 导出html
     */
    private static void exportHtml(JasperPrint jasperPrint,
                                   String defaultFilename, HttpServletRequest request,
                                   HttpServletResponse response) throws IOException, JRException {
        response.setContentType("text/html");
        ServletOutputStream ouputStream = response.getOutputStream();
        JRHtmlExporter exporter = new JRHtmlExporter();
        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
                Boolean.FALSE);
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
        //设置图片文件存放路径,此路径为服务器上的绝对路径
        String imageDIR =request.getSession().getServletContext().getRealPath("/");
        exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME, imageDIR);

        //设置图片请求URI
        String imageURI = request.getContextPath() + "/";
        exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageURI);

        //设置导出图片到图片存放路径
        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE);
        exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);

        exporter.exportReport();

        ouputStream.flush();
        ouputStream.close();
    }

    /**
     * 导出word
     */
    @SuppressWarnings("rawtypes")
    private static void exportWord(JasperPrint jasperPrint,
                                   String defaultFilename, HttpServletRequest request,
                                   HttpServletResponse response) throws JRException, IOException {
        response.setContentType("application/msword;charset=utf-8");
        String defaultname = null;
        if (defaultFilename.trim() != null && defaultFilename != null) {
            defaultname = defaultFilename + ".doc";
        } else {
            defaultname = "export.doc";
        }
        String fileName = new String(defaultname.getBytes("GBK"), "utf-8");
        response.setHeader("Content-disposition", "attachment; filename="
                + fileName);
        JRExporter exporter = new JRRtfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                response.getOutputStream());

        exporter.exportReport();
    }

    /**
     * 按照类型导出不同格式文件
     *
     *            数据
     * @param type
     *            文件类型
     * @param is
     *            jasper文件的来源
     * @param request
     * @param response
     */
    public static void export(String type, String defaultFilename, File is,
                              HttpServletRequest request, HttpServletResponse response,
                              Map parameters, Connection conn) {
        try {
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
            prepareReport(jasperReport, type);

            JasperPrint jasperPrint = JasperFillManager.fillReport(
                    jasperReport, parameters, conn);

            if (EXCEL_TYPE.equals(type)) {
                exportExcel(jasperPrint, defaultFilename, request, response);
            } else if (PDF_TYPE.equals(type)) {
                exportPdf(jasperPrint, defaultFilename, request, response);
            } else if (HTML_TYPE.equals(type)) {
                exportHtml(jasperPrint, defaultFilename, request, response);
            } else if (WORD_TYPE.equals(type)) {
                exportWord(jasperPrint, defaultFilename, request, response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void export(String type, String defaultFilename, File is,
                              HttpServletRequest request, HttpServletResponse response,
                              Map parameters, JRDataSource conn) {
        try {
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
            prepareReport(jasperReport, type);

            JasperPrint jasperPrint = JasperFillManager.fillReport(
                    jasperReport, parameters, conn);

            if (EXCEL_TYPE.equals(type)) {
                exportExcel(jasperPrint, defaultFilename, request, response);
            } else if (PDF_TYPE.equals(type)) {
                exportPdf(jasperPrint, defaultFilename, request, response);
            } else if (HTML_TYPE.equals(type)) {
                exportHtml(jasperPrint, defaultFilename, request, response);
            } else if (WORD_TYPE.equals(type)) {
                exportWord(jasperPrint, defaultFilename, request, response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 输出html静态页面,必须注入request和response
     *
     *            报表文件使用的图片路径,比如 ../servlets/image?image=
     * @throws JRException
     * @throws IOException
     */
    public static void showHtml(String defaultFilename, String reportfile,
                                HttpServletRequest request, HttpServletResponse response, Map parameters,
                                JRDataSource conn) throws JRException, IOException {


        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");

        JRAbstractExporter exporter = getJRExporter(DocType.HTML);

        JasperPrint jasperPrint = JasperFillManager.fillReport(reportfile,
                parameters, conn);
        request.getSession().setAttribute(
                ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
                jasperPrint);

        PrintWriter out = response.getWriter();

        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
        exporter.setParameter(
                JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
                Boolean.FALSE);

        //设置图片文件存放路径,此路径为服务器上的绝对路径
        String imageDIR =request.getSession().getServletContext().getRealPath("/");
        exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME, imageDIR);

        //设置图片请求URI
        String imageURI = request.getContextPath() + "/";
        exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageURI);

        //设置导出图片到图片存放路径
        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE);
        exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);
        exporter.exportReport();

        out.flush();

    }
    public static void showHtml(String defaultFilename, String reportfile,
                                HttpServletRequest request, HttpServletResponse response, Map parameters,
                                Connection conn) throws JRException, IOException {


        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");

        JRAbstractExporter exporter = getJRExporter(DocType.HTML);

        JasperPrint jasperPrint = JasperFillManager.fillReport(reportfile,
                parameters, conn);
        request.getSession().setAttribute(
                ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
                jasperPrint);

        PrintWriter out = response.getWriter();

        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
        exporter.setParameter(
                JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
                Boolean.FALSE);
        //设置图片文件存放路径,此路径为服务器上的绝对路径
        String imageDIR =request.getSession().getServletContext().getRealPath("/");
        exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME, imageDIR);

        //设置图片请求URI
        String imageURI = request.getContextPath() + "/";
        exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageURI);

        //设置导出图片到图片存放路径
        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE);
        exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);
        exporter.exportReport();
        out.flush();

    }
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void showPdf(String defaultFilename, String reportfile,
                               HttpServletRequest request, HttpServletResponse response, Map parameters,
                               JRDataSource conn) throws JRException, IOException {

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");
        response.setContentType("application/pdf");

        JRAbstractExporter exporter = getJRExporter(DocType.PDF);

        JasperPrint jasperPrint = JasperFillManager.fillReport(reportfile,
                parameters, conn);
        request.getSession().setAttribute(
                ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
                jasperPrint);

        OutputStream out = response.getOutputStream();

        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
        exporter.exportReport();
        out.flush();
    }

    public static void showPdf(String defaultFilename, HttpServletRequest request, HttpServletResponse response, JasperPrint jasperPrint) throws JRException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");
        response.setContentType("application/pdf");
        JRAbstractExporter exporter = getJRExporter(JasperHelper.DocType.PDF);
        JasperPrint jasperPrint1 = jasperPrint;
        request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint1);
        OutputStream out = response.getOutputStream();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint1);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
        exporter.exportReport();
        out.flush();
    }
}

2.PdfUtil



import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;

public class PdfUtil {
    /**
     * 转换全部的pdf
     * @param fileAddress 文件地址
     * @param filename PDF文件名
     */
    public static void pdf2pngBarcode(String fileAddress, String filename) {
        // 将pdf装图片 并且自定义图片得格式大小
        File file = new File(fileAddress+"/"+filename+".pdf");
        try {
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = 0; i < pageCount; i++) {
                BufferedImage image = renderer.renderImageWithDPI(i, 200); // Windows native DPI
//                 BufferedImage srcImage = resize(image, 240, 240);//产生缩略图

                ImageIO.write(image, "PNG", new File(fileAddress+"/"+filename+".png"));
//                changeSize(150, 100, fileAddress + "/" + filename + ".png");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void pdf2pngShunFeng(String fileAddress, String filename) {
        // 将pdf装图片 并且自定义图片得格式大小
        File file = new File(fileAddress + "/" + filename + ".pdf");
        try {
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = 0; i < pageCount; i++) {
                BufferedImage image = renderer.renderImageWithDPI(i, 200); // Windows native DPI
//                 BufferedImage srcImage = resize(image, 240, 240);//产生缩略图

                ImageIO.write(image, "PNG", new File(fileAddress + "/" + filename + ".png"));
//                changeSize(400, 600, fileAddress + "/" + filename + ".png");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static boolean changeSize(int newWidth, int newHeight, String path) {
        BufferedInputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(path));

            //字节流转图片对象
            Image bi = ImageIO.read(in);
            //构建图片流
            BufferedImage tag = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
            //绘制改变尺寸后的图
            tag.getGraphics().drawImage(bi, 0, 0, newWidth, newHeight, null);
            //输出流
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(path));
            //JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            //encoder.encode(tag);
            ImageIO.write(tag, "PNG", out);
            in.close();
            out.close();
            return true;
        } catch (IOException e) {
            return false;
        }
    }
}



Step3 测试类(利用SpringMVC直接配置)
package hdu.huier.huierbusiness.controller;

import hdu.huier.huierbusiness.utils.JasperHelper;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

/**
 * @Author: Yin
 * @Date: 2020/7/4 15:21
 */
@CrossOrigin
@RestController
@EnableTransactionManagement
@RequestMapping("/report")
public class ReportController {
    @Value("${FilePath}")
    String FilePath;
    @Value("${spring.datasource.druid.datasource1.url}")
    String url;
    @Value("${spring.datasource.druid.datasource1.username}")
    String username;
    @Value("${spring.datasource.druid.datasource1.password}")
    String password;

    @GetMapping({"/huierReport"})
    @ResponseBody
    public void huierPrint(HttpServletRequest request, HttpServletResponse response, String s) throws Exception, IOException, JRException {
        //此处使用的pojo类必须和模板文件中的类一致,否则无法正确生成.
        HashMap<String,Object> hashMap = new HashMap<>(2);
        //这里的参数名与参数类型都要与jasper报表中的一致
        hashMap.put("stoid",1L);
        hashMap.put("stogctid","1212");
        List<HashMap> userList = Arrays.asList(hashMap,hashMap);
        //模拟数据源
        JRDataSource jrDataSource = new JRBeanCollectionDataSource(userList);
        File reporeFile = new File(this.FilePath + "/pp.jasper");
//        参数说明: 文件名   jasper文件路径  请求  回复   请求参数(Map)  数据库连接
        JasperHelper.showPdf("test1", reporeFile.getPath(), request, response, new HashMap(), jrDataSource);
    }

    @GetMapping({"/huierReport2"})
    @ResponseBody
    public void huierPrint2(HttpServletRequest request, HttpServletResponse response, String s) throws Exception, IOException, JRException {
        HashMap<String,Object> t = new HashMap<>();
        t.put("ceshi","1");
        String dburl = this.url;
        String dbuser = this.username;
        String dbpassword = this.password;
        Connection conn = DriverManager.getConnection(dburl, dbuser, dbpassword);
        File reporeFile = new File(this.FilePath + "/p3.jasper");
        JasperHelper.showPdf("test2", reporeFile.getPath(), request, response, t, conn);
    }
}

到这里我们就把环境配好了,现在我们需要进行报表的编辑,也就是生成jrxml,jasper文件。

Step4 绘制报表

打开TIBCO Jaspersoft
在这里插入图片描述
看到页面如下:【这里报表的绘制不多做介绍,看参看其他博主教程,这里附上一个链接:https://www.cnblogs.com/sharpest/p/6094031.html
在这里插入图片描述

现在假如绘制了这样一张报表:
在这里插入图片描述
然后点击preview,会显示这样的数据:
在这里插入图片描述
然后点击build 获取jasper文件
在这里插入图片描述
这样,一张静态报表就完成了,放到合适的路径,就可以回到step3进行测试了。

Step5 实现动态sql

刚才已经实现了报表的生成,但还是达不到我们的需求,我们要将刚才的静态sql改成动态sql。我们去修改jrxml部分代码实现动态sql。
点击Source,进行xml查看

改成下面的样子
在这里插入图片描述
然后进行build,形成新的jasper。回到step3

@GetMapping({"/huierReport2"})
@ResponseBody
public void huierPrint2(HttpServletRequest request, HttpServletResponse response,@RequestParam String nioid) throws Exception, IOException, JRException {
        HashMap<String,Object> t = new HashMap<>();
        t.put("nioid",nioid);
        String dburl = this.url;
        String dbuser = this.username;
        String dbpassword = this.password;
        Connection conn = DriverManager.getConnection(dburl, dbuser, dbpassword);
        File reporeFile = new File(this.FilePath + "/2p.jasper");
        JasperHelper.showPdf("test2", reporeFile.getPath(), request, response, t, conn);
    }

最后,访问路径,即可动态获取报表

在这里插入图片描述

成功 撒花

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,我可以回答你关于jasperreports生成报表的问题。jasperreports是一款Java开发的报表工具,可以帮助开发者快速生成各种格式的报表。它提供了多种报表元素,如文本、图像、表格等,可以通过简单的配置来生成报表。此外,jasperreports还支持多语言和多种数据源的连接,非常方便实用。 ### 回答2: JasperReports是一个用于生成报表的开源Java库。它通过使用XML文件定义报表模板,将数据源中的数据填充到模板中,并生成输出格式多样的报表JasperReports可以生成PDF、HTML、XLS、CSV等多种格式的报表。 使用JasperReports来生成报表一般需要以下几个步骤: 1. 定义报表模板:使用JasperSoft Studio等工具创建或编辑报表模板文件,模板文件以XML格式保存。在模板中,可以指定报表的布局、样式、数据源等信息。 2. 设计数据源:JasperReports支持多种数据源,包括SQL查询、JavaBean、XML文件等。根据实际情况选择合适的数据源,并编写对应的代码或SQL查询语句。 3. 填充数据:通过代码将数据源中的数据填充到报表模板中。可以使用Java代码或JasperReports提供的API来实现数据的填充操作。 4. 生成报表:将填充完数据的报表模板导出为指定的输出格式,如PDF、HTML、XLS等。 使用JasperReports生成报表的好处是灵活性高、可扩展性强。通过使用XML模板定义报表的布局和样式,可以很方便地对报表进行编辑和修改。同时,JasperReports提供了丰富的API和工具,可以满足各种不同的报表生成需求。此外,JasperReports还支持自定义的报表元素和样式,可以根据实际情况进行个性化定制。 总之,JasperReports是一款功能强大且易于使用的报表生成工具,可以帮助开发人员快速、灵活地生成各种格式的报表。无论是简单的报表还是复杂的报表,都可以通过JasperReports来实现。 ### 回答3: Jasper Reports是一种开源的Java报表生成工具,它可以帮助开发者快速、灵活地生成各种格式的报表Jasper Reports提供了强大的报表设计工具,开发者可以使用该工具来设计报表模板,设置样式、布局等元素,并通过XML文件进行导出、导入和共享。 Jasper Reports的报表生成过程包括三个关键步骤:数据源准备、报表设计和导出。 首先,需要准备数据源。Jasper Reports支持多种数据源,包括数据库、XML文件、Java对象等。开发者可以根据需要选择相应的数据源,通过查询或组装数据,为报表提供数据内容。 接下来,进行报表设计。开发者可以使用Jasper Reports提供的可视化报表设计工具,通过拖拽和设置属性的方式,创建报表模板。在模板中,可以添加文本、图片、表格、图表等元素,并设置相应的样式和布局。还可以通过添加参数、变量、数据源和子报表等功能,实现更为复杂的报表设计。 最后,进行报表导出。通过调用Jasper Reports提供的API,可以将报表导出为多种格式,如PDF、Excel、HTML、XML等。开发者可以根据需求选择合适的导出格式,并通过设置相应的参数,对导出的报表进行格式美化和内容调整。 总的来说,Jasper Reports是一个功能强大、灵活易用的报表生成工具。它通过提供报表设计工具和API,支持多种数据源和导出格式,为开发者提供了丰富的报表设计和生成的功能。无论是简单的表格报表还是复杂的图表分析,Jasper Reports都能满足开发者的需求,并为用户提供清晰、美观的报表展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cofer_Yin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值