使用XLSX作为输出时如何保护Jasper生成的报告?

时间:2011-11-11 01:44:32

标签: excel jasper-reports excel-2007

将Jasper Report输出从xls更改为xlsx时,我遇到了与文件保护相关的问题。

需要进行更改,因为与XLS相比,XLSX可以支持更大的行(最多1.000.000)。

问题是需要保护报告。这是一项简单的任务,因为Jasper Configuration使用

支持此功能
<property name="net.sf.jasperreports.export.xls.password" value="password" />

http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/config.reference.html#net.sf.jasperreports.export.xls.password

但是当输出是XLSX时,这不起作用,我尝试使用诸如从xls到xlsx的变化之类的小事,结果保持不变。

<property name="net.sf.jasperreports.export.xlsx.password" value="password" />

如何在使用XLSX作为输出时保护Jasper生成的报告?

1 个答案:

答案 0 :(得分:1)

您可以自己制作(在挖掘JR源代码之后)只有JExcelApiExporterJExcelApiMetadataExporter类使用 net.sf.jasperreports.export.xls.password 属性。只有这两个出口商(不是JRXlsxExporter,甚至不是JRXlsExporter)才能设置密码。

来自net.sf.jasperreports.engine.export.JExcelApiExporter的代码段:

protected void setParameters()
{
    super.setParameters();

    if (createCustomPalette)
    {
        initCustomPalette();
    }

    password = 
        getStringParameter(
            JExcelApiExporterParameter.PASSWORD,
            JExcelApiExporterParameter.PROPERTY_PASSWORD
            );

...

}

private final void setSheetSettings(WritableSheet sheet)
{
    PageOrientation po;
    PaperSize ps;

    if (jasperPrint.getOrientationValue() == OrientationEnum.PORTRAIT)
    {
        po = PageOrientation.PORTRAIT;
    }
    else
    {
        po = PageOrientation.LANDSCAPE;
    }
    if ((ps = getSuitablePaperSize(jasperPrint)) != null)
    {
        sheet.setPageSetup(po, ps, 0, 0);
    }
    else
    {
        sheet.setPageSetup(po);
    }
    SheetSettings sheets = sheet.getSettings();
    ...
    if(password != null)
    {
        sheets.setPassword(password);
        sheets.setProtected(true);
    }
...
}

您可以编写自己的XlsxExporter。

JRXLSExporter使用POI library,JExcelApiExporter使用JExcelApi