2014-03-26 2 views
1

에 같은 jrxml 파일을 컴파일 나는 다음과 같은 요구 사항이있는 POC를하고있는 중이 야 :재스퍼 : 여러 출력 형식

나는 같은 열과 열 유형을 갖는 데이터베이스에 두 개의 테이블 A와 B가있다.

두 테이블 사이의 차이점을 얻으려면 다음 쿼리를 실행하고 있습니다. 같은 키, 다른 열이나 행은 또 다른 하나의 존재가 아니라 : 나는 자바 컬렉션의 차이 행을 일단

SELECT MIN(TableName) as TableName, ID, COL1, COL2, COL3 ... 
FROM 
(
SELECT 'Table A' as TableName, A.ID, A.COL1, A.COL2, A.COL3, ... 
FROM A 
UNION ALL 
SELECT 'Table B' as TableName, B.ID, B.COL1, B.COl2, B.COL3, ... 
FROM B 
) as tmp 
GROUP BY ID, COL1, COL2, COL3 ... 
HAVING COUNT(*) = 1 
ORDER BY ID 

, 내가 보고서로 출력을하고 싶습니다.

그러나 출력 형식을 구성 할 수 있어야합니다. 예 : 요구 사항이 PDF를 생성하는 것이라면 출력은 PDF 여야합니다. 요구 사항이 XLS이면 출력은 XLS 여야합니다.

이제 단일 JRXML 파일을 생성하고 동일한 JRXML을 PDF 또는 XLS로 컴파일 할 가능성을 모색 중입니다.

가능합니까? 누구든지 같은 JRXML이 여러 출력 형식으로 컴파일되는 예제를 가르쳐 주시겠습니까?

읽어 주셔서 감사합니다.

+0

시도 했습니까? 행운? – Anto

+0

그래서? 더 많거나 적게 같은 대답 3 ... 그래, 가능합니다. 지금 문제가 있습니까? – ganzux

+0

@Anto : 네 .. 답변을 얻는 방법을 시도해 보았습니다. 고마워 .. – Nik

답변

1

예, 가능합니다. jrxml을 작성하고 jasper 파일로 컴파일해야합니다.

public ByteArrayOutputStream fillPDF(JasperPrint jasperPrint) throws Exception{ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    JRPdfExporter exporter = new JRPdfExporter(); 
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,baos); 
    exporter.exportReport(); 
    return baos; 
} 

아니면 XLS 파일 (JRXlsExporter) :

public ByteArrayOutputStream fillXLS(JasperPrint jasperPrint) throws Exception{ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    JRXlsExporter exporterXls = new JRXlsExporter(); 
    exporterXls.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporterXls.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); 
    exporterXls.exportReport(); 
    exporterXlsbaos; 
} 

참고 : 당신이 당신의 JasperPrint이있을 때 그런 다음, 당신은 PDF 파일 (JRPdfExporter)를 구축 요청할 수 있습니다 단지에 대한 , 코드를 반복했지만 보고서의 유형에 매개 변수와 하나의 메소드를 작성할 수 있습니다. 또한 예외를 올바르게 처리 할 수 ​​있습니다.

+0

whats ithe code exporterXlsbaos는 의미합니까? –

+0

mhhhhhhh ... 방법이 될 수 없기 때문에 오타가되는 것 같습니다. 2 년 전 이었지만이 줄은 실제로 기억하지 못합니다. 어쨌든 코드가 완벽하게 작동한다는 것을 기억합니다. :) – ganzux

0

확실히 가능합니다. 두 가지 형식으로 보고서를 생성하는 단일 메서드를 구현해야한다는 요구 사항이있었습니다. 그리고 실제로 두 가지 다른 방법으로 출력 부분의 형식을 분할했습니다 (단지 사용하기 쉽도록 만들었습니다 :)). 따라서 기본적으로 두 가지 방법 (pdf 및 xls 형식의 경우)을 만들고 필요에 따라 호출 할 수 있습니다 (모든 방법을 단일 메서드 안에 넣을 수도 있지만이 경우에는 일부 컨트롤을 사용해야합니다.) 내 경우, 내 방법의 책임 부분은 다음과 같습니다

 public void generatePDF(JasperPrint print) throws FileNotFoundException, JRException, 
                      IOException { 
     ///// For printing report as PDF file //////// 
     java.util.Date date = new java.util.Date(); 
     SimpleDateFormat ft = new SimpleDateFormat("dd.MM.yyyy_hh.mm.ss"); 
     String now = ft.format(date); 
     String new_name = now + ".pdf"; 
     OutputStream out = null; 
     out = new FileOutputStream(new File("/" + new_name)); 
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
     JasperExportManager.exportReportToPdfStream(print, out); 
     out.write(byteArrayOutputStream.toByteArray()); 
     out.flush(); 
     out.close(); 
} 

이 경우

public void generateEXCEL(JasperPrint print) throws FileNotFoundException, JRException, 
                     IOException { 
    //--------------EXCEL--------------- 
    java.util.Date date = new java.util.Date(); 
    SimpleDateFormat ft = new SimpleDateFormat("dd.MM.yyyy_hh.mm.ss"); 
    String now = ft.format(date); 
    String excel = now + ".xls"; 
    OutputStream out2 = null; 
    out2 = new FileOutputStream(new File("/" + excel)); 
    ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream(); 
    // coding For Excel: 
    JRXlsExporter exporterXLS = new JRXlsExporter(); 
    exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, print); 
    exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, byteArrayOutputStream2); 
    exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); 
    exporterXLS.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); 
    exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 
    exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); 
    exporterXLS.exportReport(); 
    out2.write(byteArrayOutputStream2.toByteArray()); 
    out2.flush(); 
    out2.close();} 

내가 OS 파일 시스템의 루트 디렉토리에 생성 된 출력을 저장하고있어 (그 이유는 "/"입니다.)

,515,

두 전화에있어서, 내부 판독 한 jrxml이 있지만 :

JasperPrint print = null; 
       try { 
        print = JasperFillManager.fillReport(template, parameters, conn); 
} 
    ........ 
    generatePDF(print); 
    generateXLS(print); 

참고 : .XLS 출력의 경우에, 어떤 포맷이 필요가. 위의 경우처럼 특정 매개 변수를 사용하여 수행 할 수 있습니다.

0

당신은

JasperExportManager.exportReportToPdfFile(jasperPrint,filename); 
JasperExportManager.exportReportToHtmlFile(filename); 
JasperExportManager.exportReportToXml(jasperPrint); 

이 당신이 사용할 수있는 다른 형식이다 사용할 수 있습니다.