Ver Mensaje Individual
  #984 (permalink)  
Antiguo 05/03/2008, 08:26
saga_ra
 
Fecha de Ingreso: febrero-2007
Mensajes: 1
Antigüedad: 17 años, 2 meses
Puntos: 0
Concatenar dos PDF

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>
Ya habian posteado esta respuesta para concatenar dos reporte y unirlos en unos solo, de hecho muchas gracias me funciono bastante bien, pero ahora tengo una pregunta.
Ese código es para concatenarlos usando struts, ahora estoy usando JSF (Java Server Faces) y el código para imprimir un reporte cambia, pero la pregunta es, alguien sabe como se hace para concatenar reportes usando JSF??