2011-11-11 30 views
1

將Jasper Report輸出從xls更改爲xlsx時,我遇到了有關文件保護的問題。如何在使用XLSX作爲輸出時保護Jasper生成報告?

需要進行更改,因爲與XLS相比,XLSX可以支持更大的行(高達1.000.000)。

問題是需要保護的報告。這是一個容易的任務,因爲碧玉配置支持這種通過使用

<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

正如你可以讓自己只JExcelApiExporterJExcelApiMetadataExporter類使用net.sf.jasperreports.export.xls.password屬性(在JR源代碼後挖掘)。只有這兩個出口商(不是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

相關問題