2016-03-11 3 views
0

У меня есть требование, когда мне нужно сгенерировать отчеты XML, и мне нужно заполнить XML значениями из базы данных.Как сгенерировать отчет XML?

Я начинаю использовать отчеты Jasper, где я могу генерировать отчеты PDF, xls и CSV, но я не смог сгенерировать XML.

У меня есть jrxml файл, который я сделал, компилировать и использовал фрагмент кода ниже для генерации PDF, CSV и XLS, но генерации XML, как представляется, вопрос:

if(contentType == 'text/csv'){ 
    params.response.setHeader("Content-disposition", "attachment;filename=" + params.reportName + ".csv") 
    exporter = new net.sf.jasperreports.engine.export.JRCsvExporter(); 
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    if(params.feed){ 
     exporter.setParameter(JRCsvExporterParameter.FIELD_DELIMITER, "|"); 
    } 
    fileName = reportTempDir + "/" + fileName + ".csv" 
}else if(contentType== 'application/pdf'){ 
    params.response.setHeader("Content-disposition", "attachment;filename=" + params.reportName + ".pdf") 
    exporter = new net.sf.jasperreports.engine.export.JRPdfExporter(); 
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    fileName = reportTempDir + "/" + fileName + ".pdf" 
}else{ 
    params.response.setHeader("Content-disposition", "attachment;filename=" + params.reportName + ".xls") 
    exporter = new net.sf.jasperreports.engine.export.JExcelApiExporter(); 
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE,true); 
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET ,false); 
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS ,true); 
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS ,true); 
    exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND ,false); 
    exporter.setParameter(JRXlsExporterParameter.IS_IGNORE_GRAPHICS ,false); 
    exporter.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN ,false); 
    exporter.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BORDER ,false); 
    exporter.setParameter(JRXlsExporterParameter.IS_FONT_SIZE_FIX_ENABLED ,true); 
    exporter.setParameter(JRXlsExporterParameter.SHEET_NAMES ,[sheetName]as String[]); 
    fileName = reportTempDir + "/" + fileName + ".xls" 
} 
FileOutputStream osGenre = new FileOutputStream(fileName); 
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, osGenre); 
exporter.exportReport(); 

ответ

0

Существует JRXmlExporter

JRXmlExporter exporter = new JRXmlExporter(); 
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 
exporter.setExporterOutput(new SimpleXmlExporterOutput(outputSteam)); 
exporter.exportReport(); 

Это создаст файл XML вашего JasperPrint, однако его не чистое извлечение данных, но только XML-представление печати

Пример

<?xml version="1.0" encoding="UTF-8"?> 
<jasperPrint xmlns="http://jasperreports.sourceforge.net/jasperreports/print" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/print http://jasperreports.sourceforge.net/xsd/jasperprint.xsd" name="ReportStat" pageWidth="595" pageHeight="842" topMargin="30" leftMargin="20" bottomMargin="30" rightMargin="20" locale="it_IT" timezone="Europe/Berlin"> 
    <origin band="title"/> 
    <origin band="columnHeader"/> 
    <origin band="detail"/> 
    <origin band="summary"/> 
    <page> 
     <text verticalAlignment="Middle" textHeight="12.578125" lineSpacingFactor="1.2578125" leadingOffset="-2.1972656"> 
      <reportElement uuid="dfe13f55-12a6-4c33-b5ba-00dd61f37c96" mode="Opaque" x="20" y="335" width="100" height="20" forecolor="#000000" backcolor="#CCCCCC" origin="1" srcId="2" printId="1"/> 
      <box leftPadding="2"> 
       <topPen lineWidth="0.25"/> 
       <leftPen lineWidth="0.25"/> 
       <bottomPen lineWidth="0.25"/> 
       <rightPen lineWidth="0.25"/> 
      </box> 
      <textContent><![CDATA[TOTALE]]></textContent> 
     </text> 
     .... 
    </page> 
</jasperPrint> 

Если вам нужен более чистый извлечение данных, которые необходимо создать свой собственный CustomExporter, хороший старт может быть, чтобы переопределить JRCsvExporter и реализовать свою собственную логику.

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