Identificarte

Versión Completa : Generar archivo PDF desde Eclipse


Sponsored links
.




ana_oviedo
enero 22, 2007, 06:02
Hola, tengo una duda, estoy intentando generar un documento pdf con varios reportes, he leído que se hace asi:

/*Antes creo la lista la ruta para el reporte y demas...*/
byte [] resultados = JasperRunManager.runReportToPdf(reporte, parametros, datos);
printList.add(resultados);

ByteArrayOutputStream pdfOutput = new ByteArrayOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_P RINT_LIST, printList);
exporter.setParameter(JRExporterParameter.OUTPUT_S TREAM, pdfOutput);
exporter.exportReport(); //esta linea es la que me da el fallo
byte[] results = pdfOutput.getBytes();

cuando realiza exporter.exportReport() es cuando me da el error:net.sf.jasperreports.engine.JRAbstractExport er.setInput(JRAbstractExporter.java:292)
he mirado por muchos sitios y no he encontrado ninguna solucion, espero que
alguien sepa de esto y me pueda ayudar
Muchas graciasss

ferney2107m
febrero 26, 2008, 02:37
Hola, tengo una duda, estoy intentando generar un documento pdf con varios reportes, he leído que se hace asi:

/*Antes creo la lista la ruta para el reporte y demas...*/
byte [] resultados = JasperRunManager.runReportToPdf(reporte, parametros, datos);
printList.add(resultados);

ByteArrayOutputStream pdfOutput = new ByteArrayOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_P RINT_LIST, printList);
exporter.setParameter(JRExporterParameter.OUTPUT_S TREAM, pdfOutput);
exporter.exportReport(); //esta linea es la que me da el fallo
byte[] results = pdfOutput.getBytes();

cuando realiza exporter.exportReport() es cuando me da el error:net.sf.jasperreports.engine.JRAbstractExport er.setInput(JRAbstractExporter.java:292)
he mirado por muchos sitios y no he encontrado ninguna solucion, espero que
alguien sepa de esto y me pueda ayudar
Muchas graciasss

Mira yo tambien intente hacrelo de esa forma pero no funciono asi que me salio de esta forma:

public static void runReportToPdfDaneA(File file[],Map parameters1,Map parameters2,Map parameters3,Map parameters4) throws ServletException,IOException {
byte[] bytes = null;

JasperPrint jasperPrint1 = null;
JasperPrint jasperPrint2 = null;
JasperPrint jasperPrint3 = null;
JasperPrint jasperPrint4 = null;
try {


jasperPrint1 = JasperFillManager.fillReport(
file[0].getPath(),
parameters1,
con);
jasperPrint2 = JasperFillManager.fillReport(
file[1].getPath(),
parameters2,
con);
jasperPrint3 = JasperFillManager.fillReport(
file[2].getPath(),
parameters3,
con);
jasperPrint4 = JasperFillManager.fillReport(
file[3].getPath(),
parameters4,
con);


JRPrintPage page = jasperPrint2.removePage(0);
jasperPrint1.addPage(page);

page = jasperPrint3.removePage(0);
jasperPrint1.addPage(page);

page = jasperPrint4.removePage(0);
jasperPrint1.addPage(page);

java.io.ByteArrayOutputStream reportePDF=new java.io.ByteArrayOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
req.getSession().setAttribute(ImageServlet.DEFAULT _JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint1);
exporter.setParameter(JRExporterParameter.JASPER_P RINT,jasperPrint1);
exporter.setParameter(JRExporterParameter.OUTPUT_S TREAM,reportePDF);

exporter.exportReport();
byte results [] = reportePDF.toByteArray();
if (results != null && results.length > 0) {
res.setContentType("application/pdf");
//res.setHeader ("Content-Disposition", "attachment;filename=Dane.pdf");
res.setContentLength(results.length);
ServletOutputStream ouputStream = res.getOutputStream();
ouputStream.write(results, 0, results.length);
ouputStream.flush();
ouputStream.close();
} else {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
}


} catch (Exception e) {
//e.printStackTrace(out);
System.out.println("Error: "+e.getMessage());
//e.printStackTrace();


}


}

Para explicarte mejor el codigo tienes varios jasperprint pero vas a mostrarlos todos en un solo reporte asi que tienes que utilizar la clase JRPrintPage que te permite paginar los reportes en uno solo luego en vez de utilizar RExporterParameter.JASPER_PRINT_LIST utilizas RExporterParameter.JASPER_PRINT enviandole el jasperprint1 que es el contiene los demas jasper lo demas es lo mismo no se porque con la lista de bytes genera excepcion pero al menos de esta forma me funciono espero que te sirva

sairus black
febrero 26, 2008, 06:32
hey eso es java....nunca lo habia visto........pero esta de lujo gracias por el dato.