eu fiz o seguinte, retornei um bytearray. mas na chamada com ajax não sei como pegar esse bytearray.
este é o metodo que constrói o report
public byte[] geraPDParaOutputStream() throws IOException{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(this.nomeArquivo, this.parametros, this.connection);
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();
outputStream.close();
return outputStream.toByteArray();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return outputStream.toByteArray();
este é o controller
@Controller
public class RelatorioController {
@Autowired
private HttpServletRequest request;
@Autowired
private TemporaryMachineIdDao tempMachineDao;
@ResponseBody
@RequestMapping(value = "/report/relatorio", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public void form(@RequestParam("id[]") int id[],
@RequestParam("dateIni") @DateTimeFormat(pattern = "dd/MM/yyyy") Date dateIni,
@RequestParam("dateFim") @DateTimeFormat(pattern = "dd/MM/yyyy") Date dateFim,
@RequestParam("horaInit") String horaInit, @RequestParam("minutoInit") String minutoInit,
@RequestParam("horaFim") String horaFim, @RequestParam("minutoFim") String minutoFim,
HttpServletResponse response) throws JRException, SQLException, IOException {
Calendar cal = Calendar.getInstance();
Calendar calDateIni = Calendar.getInstance();
calDateIni.setTime(dateIni);
calDateIni.set(Calendar.HOUR_OF_DAY,Integer.valueOf(horaInit));
calDateIni.set(Calendar.MINUTE,Integer.valueOf(minutoInit));
Calendar calDateFim = Calendar.getInstance();
calDateFim.setTime(dateFim);
calDateFim.set(Calendar.HOUR_OF_DAY,Integer.valueOf(horaFim));
calDateFim.set(Calendar.MINUTE,Integer.valueOf(minutoFim));
Relatorio relatorio = new Relatorio();
relatorio.setTag((int) cal.getTimeInMillis());
relatorio.setMachinesIds(id);
relatorio.setDateIni(calDateIni.getTime());
relatorio.setDateFim(calDateFim.getTime());
System.out.println(relatorio.toString());
for (int i = 0; i < relatorio.getMachinesIds().length; i++) {
TemporaryMachineId tempMachine = new TemporaryMachineId();
tempMachine.setMachineId(relatorio.getMachinesIds()[i]);
tempMachine.setTag(relatorio.getTag());
tempMachineDao.gravar(tempMachine);
}
//String nome = request.getServletContext().getRealPath("/WEB-INF/jasper/reportMaquinaData");
String nome = "c:/teste/reportMaquinaData";
JasperCompileManager.compileReportToFile(nome+".jrxml");
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("dataIni", relatorio.getDateIni());
parametros.put("dataFim", relatorio.getDateFim());
parametros.put("tagSrc", "1178345026");
Connection conn = tempMachineDao.retornaCon();
GeradorRelatorioUtil geradorRelatorio = new GeradorRelatorioUtil(nome+".jasper", parametros, conn);
byte [] data = geradorRelatorio.geraPDParaOutputStream();
streamReport(response, data, "report.pdf");
}
protected void streamReport(HttpServletResponse response, byte[] data, String name)
throws IOException {
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "attachment; filename=" + name);
response.setContentLength(data.length);
response.getOutputStream().write(data);
response.getOutputStream().flush();
}
}
chamada ajax.
$('#criaRelatorio').click(
function() {
var dataIni = $('#dateIni').val();
var objDateIni = new Date();
objDateIni.setYear(dataIni.split("/")[2]);
objDateIni.setMonth(dataIni.split("/")[1]);
objDateIni.setDate(dataIni.split("/")[0]);
var dateFim = $('#dateFim').val();
var objDateFim = new Date();
objDateFim.setYear(dateFim.split("/")[2]);
objDateFim.setMonth(dateFim.split("/")[1]);
objDateFim.setDate(dateFim.split("/")[0]);
if (objDateIni.getTime() > objDateFim.getTime()) {
alert('dataIni menor que data Fim');
}
if (objDateIni.getTime() == objDateFim.getTime()) {
var horaInit = $('#horaInit option:selected')
.text()
+ $('#minutoInit option:selected').text();
var horaFim = $('#horaFim option:selected').text()
+ $('#minutoFim option:selected').text();
if (horaInit > horaFim) {
alert('horaIni maior que horaFim');
}
} else {
var ids = [];
$(':checkbox:checked').each(function(i) {
ids[i] = $(this).val();
});
if (ids == 0) {
alert("selecione alguma maquina");
} else {
var horaInit = $('#horaInit option:selected').val();
var minutoInit = $('#minutoInit option:selected').val();
var horaFim = $('#horaFim option:selected').val();
var minutoFim = $('#minutoFim option:selected').val();
var dateFim = $('#dateFim').val();
var dateIni = $('#dateIni').val();
$.ajax({
url : 'report/relatorio',
method : 'POST',
data : {
id : ids,
dateIni:dateIni,
dateFim:dateFim,
horaInit:horaInit,
minutoInit:minutoInit,
horaFim:horaFim,
minutoFim:minutoFim
},
success : function() {
}
});
}
}
});
como devo proceder?