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

时间:2014-01-14 22:08:24

标签: 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.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:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports     http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy"     pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20"     topMargin="20" bottomMargin="20" uuid="ac32c69e-bb80-4dc5-9139-f9b085ffa739">
    <queryString language="SQL">
        <![CDATA[SELECT * FROM test.item]]>
    </queryString>
    <field name="ITEM_NAME" class="java.lang.String">
        <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="ITEM_DESCIPTION" class="java.lang.String">
        <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="ITEM_AMOUNT" class="java.lang.Integer">
        <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="36" splitType="Stretch"/>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="41" splitType="Stretch">
            <staticText>
                <reportElement x="13" y="11" width="100" height="20"     uuid="97ab8c4f-ec9e-47a1-807e-37e2adbf9d36"/>
                <text><![CDATA[ITEM NAME]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="43" splitType="Stretch">
            <textField>
                <reportElement x="13" y="11" width="100" height="20"     uuid="0fe760df-5c76-499f-8f79-3308680e9a37"/>
                    <textFieldExpression><![CDATA[$F{ITEM_NAME}]]>        </textFieldExpression>
                </textField>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

文件已生成但未受密码保护。

我正在使用 JasperReports-5.5.0 iReport 5.5.0

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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

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

我也有兴趣知道是否有办法密码保护excel文档本身..在Apache POI中找不到任何东西。