package reportbuilder; import com.googlecode.jthaipdf.jasperreports.engine.export.ThaiJRPdfExporter; import java.awt.print.PrinterJob; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; import java.sql.Connection; import java.sql.ResultSet; import java.util.Locale; import java.util.Map; import java.util.Scanner; import javax.print.PrintService; import javax.print.PrintServiceLookup; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporter; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JRParameter; import net.sf.jasperreports.engine.JRResultSetDataSource; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperPrintManager; import net.sf.jasperreports.engine.export.JRCsvExporter; import net.sf.jasperreports.engine.export.JRCsvExporterParameter; import net.sf.jasperreports.engine.export.JRPdfExporterParameter; import net.sf.jasperreports.engine.export.JRRtfExporter; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter; public class Exporter { private JasperPrint print; private String outputFile; private String encoding; private String outputType; private String reportId; private String reportName; private String labelName; private String reportFile; public String getIsExtendReportFile(String reportFile){ if(Files.exists(Paths.get(reportFile))==false){ reportFile=reportFile.replaceAll(ReportBuilder.coreName, ReportBuilder.prefix); } ReportBuilder.writeMessage("Accept report #" + reportFile + " building ... "); return reportFile; } public Exporter(Connection con, Map map, String reportId, String labelName, String reportName, String reportFile, String outputFile, String outputType, String encoding) throws Exception { this.outputFile = outputFile; this.outputType = outputType; this.encoding = encoding; this.reportId = reportId; this.reportName = reportName; this.labelName = labelName; this.reportFile=getIsExtendReportFile(reportFile); ReportBuilder.writeMessage("Generate report #" + outputFile + " building ... "); if (outputType.equals("xlsx_data") || outputType.equals("xls_data") || outputType.equals("csv")) { map.put("IS_IGNORE_PAGINATION", true); } map.put(JRParameter.REPORT_LOCALE, new Locale("th", "TH")); print = JasperFillManager.fillReport(this.reportFile, map, con); export(); } public Exporter(ResultSet rs, Map map, String reportId, String labelName, String reportName, String reportFile, String outputFile, String outputType, String encoding) throws Exception { this.outputFile = outputFile; this.outputType = outputType; this.encoding = encoding; this.reportId = reportId; this.reportName = reportName; this.labelName = labelName; this.reportFile=getIsExtendReportFile(reportFile); ReportBuilder.writeMessage("Generate report #" + outputFile + " building ... "); if (outputType.equals("xlsx_data") || outputType.equals("xls_data") || outputType.equals("csv")) { map.put("IS_IGNORE_PAGINATION", true); } JRDataSource jrDs = new JRResultSetDataSource(rs); map.put(JRParameter.REPORT_LOCALE, new Locale("th", "TH")); print = JasperFillManager.fillReport(this.reportFile, map, jrDs); export(); } public void export() throws JRException { if (outputType.equals("pdf")) { exportPdf(); } else if (outputType.equals("xls_data")) { exportXlsData(); } else if (outputType.equals("xlsx_data")) { exportXlsxData(); } else if (outputType.equals("xls_full")) { exportXlsFull(); } else if (outputType.equals("xlsx_full")) { exportXlsxFull(); } else if (outputType.equals("csv")) { exportCsv(); } else if (outputType.equals("rtf")) { exportRtf(); } else if (outputType.equals("direct")) { exportPrinter(); } } public void exportPrinter() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Direct " + reportName + " building ..... TO "+ReportBuilder.selectedPrinter); //JRExporter expt = new JRPdfExporter(); //expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); //expt.setParameter(JRExporterParameter.JASPER_PRINT, print); //expt.exportReport(); boolean printSucceed =false; PrintService selectedService = null; //int pos = outputFile.lastIndexOf("/"); //String printer = outputFile.substring(pos+1); String printer = outputFile; try{ //JasperPrint jasperPrint = JasperPrinterCreator.getJasperprint(); //String selectedPrinter = AllPrinter.getDepartmentPrinter("Admin"); PrinterJob printerJob = PrinterJob.getPrinterJob(); PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); if(services.length != 0 || services != null) { for(PrintService service : services){ String existingPrinter = service.getName().toLowerCase(); if(existingPrinter.equals(printer.toLowerCase())) { selectedService = service; break; } } if(selectedService != null) { printerJob.setPrintService(selectedService); printSucceed = JasperPrintManager.printReport(print, false); } if(printSucceed){ ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Direct " + reportName + " build success .....TO "+printer+"=>"+selectedService.getName()); }else{ ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Direct " + reportName + " build fail .....TO "+printer+"=>"+selectedService.getName()); } } }catch(Exception e){ ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Direct " + reportName + " build fail .....TO "+printer+"=>"+selectedService.getName()+" Error "+e.getMessage()); } } public void exportPdf() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " PDF " + reportName + " building ....."); //JRExporter expt = new JRPdfExporter(); ThaiJRPdfExporter expt = new ThaiJRPdfExporter(); expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); expt.setParameter(JRExporterParameter.JASPER_PRINT, print); try{ String report_name="",indexFile = "",indexFilename = "\\AUTO_PRINT_REPORT_ID.txt",indexFullFilepath=""; String regEx4Win = "\\\\(?=[^\\\\]+$)"; String[] tokens = reportFile.split(regEx4Win); if(tokens.length > 0){ indexFile = tokens[0]; report_name=tokens[1]; } report_name=report_name.replaceAll("_myl", ""); indexFullFilepath=indexFile+indexFilename; ReportBuilder.writeMessage("Finding "+report_name+" in Auto Printer File : "+indexFullFilepath); String contentConfig=new Scanner(new File(indexFullFilepath)).useDelimiter("\\Z").next(); Boolean passedLine = false; if(contentConfig.indexOf(report_name)>=0){ passedLine = true; } ReportBuilder.writeMessage((passedLine?"Found ":"Not found ")+report_name+"# Finding Auto Printer in File : "+indexFile); if(passedLine) expt.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, "this.print();"); }catch(Exception e){ e.printStackTrace(); } expt.exportReport(); ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " PDF " + reportName + " build success ....."); } public void exportXlsData() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 97-2003 " + reportName + " building ....."); JRXlsExporter expt = new JRXlsExporter(); expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); expt.setParameter(JRExporterParameter.JASPER_PRINT, print); expt.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE); expt.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); expt.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, encoding); expt.exportReport(); ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 97-2003 " + reportName + " build success ....."); } public void exportXlsFull() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 97-2003 " + reportName + " building ....."); JRXlsExporter expt = new JRXlsExporter(); expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); expt.setParameter(JRExporterParameter.JASPER_PRINT, print); expt.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, encoding); expt.exportReport(); ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 97-2003 " + reportName + " success ....."); } public void exportXlsxData() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 2007-2013 " + reportName + " building ....."); JRXlsxExporter expt = new JRXlsxExporter(); expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); expt.setParameter(JRExporterParameter.JASPER_PRINT, print); expt.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE); expt.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); expt.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, encoding); expt.exportReport(); ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 2007-2013 " + reportName + " success ....."); } public void exportXlsxFull() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 2007-2013 " + reportName + " building ....."); JRXlsxExporter expt = new JRXlsxExporter(); expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); expt.setParameter(JRExporterParameter.JASPER_PRINT, print); expt.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, encoding); expt.exportReport(); ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Excel 2007-2013 " + reportName + " success ....."); } public void exportCsv() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Csv " + reportName + " building ....."); JRCsvExporter expt = new JRCsvExporter(); expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); expt.setParameter(JRExporterParameter.JASPER_PRINT, print); expt.setParameter(JRCsvExporterParameter.CHARACTER_ENCODING, encoding); expt.exportReport(); ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " Csv " + reportName + " success ....."); } private void exportRtf() throws JRException { ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " RTF " + reportName + " building ....."); JRExporter expt = new JRRtfExporter(); expt.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); expt.setParameter(JRExporterParameter.JASPER_PRINT, print); expt.exportReport(); ReportBuilder.writeMessage("#" + labelName + "#" + reportId + " RTF " + reportName + " build success ....."); } }