Java 如何使用JasperReports生成受密码保护的excel报告?

Java 如何使用JasperReports生成受密码保护的excel报告?,java,jasper-reports,password-protection,Java,Jasper Reports,Password Protection,我正在尝试生成一个简单的受密码保护的excel报告 Java代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.HashMap; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperCompileMana

我正在尝试生成一个简单的受密码保护的excel报告

Java代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JExcelApiExporter;
import net.sf.jasperreports.engine.export.JExcelApiExporterParameter;

public class Report {

    public static void main(String[] args) {
        try {
            JasperReport jasperReport;
            JasperPrint jasperPrint;

            Connection connection = establishConnection();
            HashMap jasperParameter = new HashMap();

            jasperReport = JasperCompileManager.compileReport("D:\\Jasper\\report1.jrxml");
            jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParameter, connection);

            JExcelApiExporter exporter = new JExcelApiExporter();
            exporter.setParameter(JExcelApiExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JExcelApiExporterParameter.OUTPUT_FILE_NAME, "D:\\Jasper\\simple_report.xls");
            exporter.setParameter(JExcelApiExporterParameter.PASSWORD, "sam");

            exporter.exportReport();
        } catch (JRException e) {
            e.printStackTrace();
        }
    }

    public static Connection establishConnection() {
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String mySQL = "jdbc:mysql://localhost:3306/test";
            connection = DriverManager.getConnection(mySQL, "root", "Infy123+");
            connection.setAutoCommit(false);
        } catch (SQLException | ClassNotFoundException exception) {
            exception.printStackTrace();
        }
        return connection;
    }
}
report1.jrxml:


正在生成该文件,但没有密码保护

我正在使用JasperReports-5.5.0和iReport 5.5.0


如何解决此问题?

您可以使用JasperReport中提供的内置POI api禁用Excel报告的编辑。但是,excel仍然可以打开

密码保护仅适用于Excel编辑选项

我还想知道是否有办法对excel文档本身进行密码保护。。在Apache POI中找不到任何内容