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

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

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

问题是报告需要保护。 这是一个简单的任务,因为Jasperconfiguration支持这个使用

<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生成报告?

正如你可以让自己(在挖掘JR源代码后)只有JExcelApiExporter和JExcelApiMetadataExporter类使用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库 ,JExcelApiExporter使用JExcelApi 。