使用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 。