Ver Mensaje Individual
  #909 (permalink)  
Antiguo 04/09/2007, 14:29
Avatar de varonmarcos
varonmarcos
 
Fecha de Ingreso: agosto-2007
Ubicación: Colombia
Mensajes: 4
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Concatenar dos PDF Resuelto

Cita:
Iniciado por yimenz Ver Mensaje
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!!!