04/09/2007, 14:29
|
| | | Fecha de Ingreso: agosto-2007 Ubicación: Colombia
Mensajes: 4
Antigüedad: 17 años, 4 meses Puntos: 0 | |
Re: Concatenar dos PDF Resuelto Cita:
Iniciado por yimenz Desktructor ya pude concatenar dos pdf en Uno.
De este modo se pueden hacer dos reportes diferentes y unirlos en uno solo, aca les dejo el codigo, esta explicado.
Codigo:
Código:
<%@ page import = "BaseDatos.Acceso" %>
<jsp:useBean id = "acceso" scope="page" class="BaseDatos.Acceso"/>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.design.*" %>
<%@ page import="net.sf.jasperreports.engine.data.*"%>
<%@ page import="net.sf.jasperreports.engine.export.*"%>
<%@ page import="net.sf.jasperreports.engine.util.*"%>
<%@ page import="net.sf.jasperreports.view.*"%>
<%@ page import="net.sf.jasperreports.view.save.*"%>
<%@ page import="com.lowagie.text.pdf.PdfCopyFields"%>
<%@ page import="com.lowagie.text.pdf.PdfReader"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<html>
<head><title>Generando Reporte Historia de Ingreso...............</title>
<head>
<%
/*Declaro e inicializo la variable codigobebe, para enviarla como parametro*/
String codigobebe="0";
if (request.getParameter("codigobebe")!=null)
codigobebe = request.getParameter("codigobebe");
/*FIN Declaro e inicializo la variable codigobebe, para enviarla como parametro*/
try{
String ResultadoConexion = acceso.Conectar();
if ("Ok".equals(ResultadoConexion))
{
/*<Obtengo una conexión de la Base de datos>*/
Connection conn = acceso.getConexion();
/*<Cargamos el jasperreports-0.6.7.jar OK>*/
System.setProperty("jasper.reports.compile.class.path", application.getRealPath("/WEB-INF/lib/jasperreports-0.6.7.jar") +
System.getProperty("path.separator") +
application.getRealPath("/WEB-INF/classes/"));
/*<Primer reporte>*/
/*<Compilamos el primer reporte historiaIngreso.jrxml>*/
System.setProperty("jasper.reports.compile.temp", application.getRealPath("/WEB-INF/reportes/"));
JasperCompileManager.compileReportToFile(application.getRealPath("/WEB-INF/reportes/historiaIngreso.jrxml"));
/*<FIN de compilar el primer reporte historiaIngreso.jrxml>*/
/*<Obtenemos el archivo .jasper historiaIngreso.jasper>*/
File reportFile = new File(application.getRealPath("/WEB-INF/reportes/historiaIngreso.jasper"));
/*<Enviamos los parametros al reporte, en este ejemplo utilizo los mismos parametros para los dos reportes>*/
Map parameters = new HashMap();
parameters.put("CODIGO_BEBE",codigobebe);
/*<Generamos el reporte en PDF, se guarda en una variable tipo bytes>*/
byte[] bytes = JasperRunManager.runReportToPdf( reportFile.getPath(), parameters, conn ); //Generar reporte PDF
/*<FIN Primer reporte>*/
/*<Segundo reporte>*/
/*<Compilamos el segundo reporte historiaIngreso2.jrxml>*/
JasperCompileManager.compileReportToFile(application.getRealPath("/WEB-INF/reportes/historiaIngreso2.jrxml"));
/*<FIN de compilar el segundo reporte historiaIngreso2.jrxml>*/
/*<Obtenemos el archivo .jasper historiaIngreso2.jasper>*/
File reportFile2 = new File(application.getRealPath("/WEB-INF/reportes/historiaIngreso2.jasper"));
/*<Generamos el reporte en PDF, se guarda en una variable tipo bytes>*/
byte[] bytes2 = JasperRunManager.runReportToPdf( reportFile2.getPath(), parameters, conn ); //Generar reporte PDF
/*<FIN Segundo reporte>*/
/*<Concatenamos los dos reportes>*/
PdfReader reader1 = new PdfReader(bytes);
PdfReader reader2 = new PdfReader(bytes2);
PdfCopyFields copy = new PdfCopyFields(new FileOutputStream(application.getRealPath("/WEB-INF/reportes/historiaIngreso3.pdf")));
copy.addDocument(reader1);
copy.addDocument(reader2);
copy.close();
/*<Concatenamos los dos reportes>*/
/*<Ahora debemos leer el reporte que creamos en /WEB-INF/reportes/ y enviarlo al navegador para su descarga>*/
/*<Se manda como tipo pdf al navegador>*/
response.setContentType("application/pdf");
/*<Se envia como adjunto, para que aparesca la ventana de Abrir con ó Guardar como>*/
response.setHeader ("Content-Disposition", "attachment;filename=\"historiaIngreso3.pdf\"");
/*<Se lee el Archivo pdf que creamos>*/
InputStream archivo = new FileInputStream(application.getRealPath("/WEB-INF/reportes/historiaIngreso3.pdf"));
/*<Se crea una variable de salida para el navegador>*/
ServletOutputStream outs = response.getOutputStream();
/*<Se lee el contenido del Archivo PDF y se envia a la variable de salida>*/
int bit = 256;
int i = 0;
while ((bit) >= 0) {
bit = archivo.read();
outs.write(bit);
}
/*<Forzamos a enviar los datos al navegador>*/
outs.flush();
/*<Se cierra la variable de salida y el archivo PDF>*/
outs.close();
archivo.close();
}
if ("NO OK".equals(ResultadoConexion))
out.println("<font color = 'red'>No se pudo conectar a la base de datos, comuniquese con el desarrollador de la aplicación.</font>");
}catch (JRException e)
{out.println("Error:" +e.getMessage());}
catch (Exception e)
{e.printStackTrace(); out.println("Error2:" +e.getMessage());
}
%>
<body onLoad="window.document.close();">
</body>
</html>
Este codigo basicamente lo que hace es lo siguiente: carga el jasperreports.jar para luego compilar y ejecutar dos reportes, despues concatena estos dos reportes en un pdf y finalmente lo envia al navegador. Hola, probe tu codigo y me funciono pero me bota el reporte PDf en blanco, pero seteo los parametros y estan bien no se que pasa!!!, te encargo una ayuda, mi codigo esta en la ultima pagina de este foro!!!
gracias!!! |