将Jasper Report输出从xls更改为xlsx时,我遇到了与文件保护相关的问题。
需要进行更改,因为与XLS相比,XLSX可以支持更大的行(最多1.000.000)。
问题是需要保护报告。这是一项简单的任务,因为Jasper Configuration使用
支持此功能<property name="net.sf.jasperreports.export.xls.password" value="password" />
但是当输出是XLSX时,这不起作用,我尝试使用诸如从xls到xlsx的变化之类的小事,结果保持不变。
<property name="net.sf.jasperreports.export.xlsx.password" value="password" />
如何在使用XLSX作为输出时保护Jasper生成的报告?
答案 0 :(得分:1)
您可以自己制作(在挖掘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 library,JExcelApiExporter使用JExcelApi。