2014-01-14 2 views
0

Я пытаюсь создать простой защищенный паролем отчет о Excel.Как создать защищенный паролем отчет Excel с использованием JasperReports?

Java код:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.HashMap; 

import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JasperCompileManager; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JasperPrint; 
import net.sf.jasperreports.engine.JasperReport; 
import net.sf.jasperreports.engine.export.JExcelApiExporter; 
import net.sf.jasperreports.engine.export.JExcelApiExporterParameter; 

public class Report { 

    public static void main(String[] args) { 
     try { 
      JasperReport jasperReport; 
      JasperPrint jasperPrint; 

      Connection connection = establishConnection(); 
      HashMap jasperParameter = new HashMap(); 

      jasperReport = JasperCompileManager.compileReport("D:\\Jasper\\report1.jrxml"); 
      jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParameter, connection); 

      JExcelApiExporter exporter = new JExcelApiExporter(); 
      exporter.setParameter(JExcelApiExporterParameter.JASPER_PRINT, jasperPrint); 
      exporter.setParameter(JExcelApiExporterParameter.OUTPUT_FILE_NAME, "D:\\Jasper\\simple_report.xls"); 
      exporter.setParameter(JExcelApiExporterParameter.PASSWORD, "sam"); 

      exporter.exportReport(); 
     } catch (JRException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static Connection establishConnection() { 
     Connection connection = null; 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      String mySQL = "jdbc:mysql://localhost:3306/test"; 
      connection = DriverManager.getConnection(mySQL, "root", "Infy123+"); 
      connection.setAutoCommit(false); 
     } catch (SQLException | ClassNotFoundException exception) { 
      exception.printStackTrace(); 
     } 
     return connection; 
    } 
} 

report1.jrxml:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports  http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy"  pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20"  topMargin="20" bottomMargin="20" uuid="ac32c69e-bb80-4dc5-9139-f9b085ffa739"> 
    <queryString language="SQL"> 
     <![CDATA[SELECT * FROM test.item]]> 
    </queryString> 
    <field name="ITEM_NAME" class="java.lang.String"> 
     <fieldDescription><![CDATA[]]></fieldDescription> 
    </field> 
    <field name="ITEM_DESCIPTION" class="java.lang.String"> 
     <fieldDescription><![CDATA[]]></fieldDescription> 
    </field> 
    <field name="ITEM_AMOUNT" class="java.lang.Integer"> 
     <fieldDescription><![CDATA[]]></fieldDescription> 
    </field> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band height="36" splitType="Stretch"/> 
    </title> 
    <pageHeader> 
     <band height="35" splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band height="41" splitType="Stretch"> 
      <staticText> 
       <reportElement x="13" y="11" width="100" height="20"  uuid="97ab8c4f-ec9e-47a1-807e-37e2adbf9d36"/> 
       <text><![CDATA[ITEM NAME]]></text> 
      </staticText> 
     </band> 
    </columnHeader> 
    <detail> 
     <band height="43" splitType="Stretch"> 
      <textField> 
       <reportElement x="13" y="11" width="100" height="20"  uuid="0fe760df-5c76-499f-8f79-3308680e9a37"/> 
        <textFieldExpression><![CDATA[$F{ITEM_NAME}]]>  </textFieldExpression> 
       </textField> 
     </band> 
    </detail> 
    <columnFooter> 
     <band height="45" splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band height="54" splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band height="42" splitType="Stretch"/> 
    </summary> 
</jasperReport> 

Файл становится порождена, но не защищен паролем.

Я использую JasperReports-5.5.0 и IReport 5.5.0.

Как решить эту проблему?

ответ

0

Вы можете отключить редактирование отчета Excel с помощью встроенного POI api, предоставленного в JasperReport. Однако excel все еще можно открыть.

Защищенный паролем относится только к варианту редактирования Excel.

Мне также будет интересно узнать, есть ли способ защитить паролем сам документ excel .. Не удалось найти что-либо в Apache POI.

Смежные вопросы