3Respostas

 Olá pessoal,

Desejo saber se alguém de um exemplo de como chamar um relatório criado no iReport. Queria que o exemplo tiver o doiu, java, jsp e como faz o mapeamento no web.xml.

Não precisa ser um que passe parametros, apenas um exemplo de como chamar o relatorio via um botão mesmo.

Grato.

Em 10/02/2012 12:06

3 Respostas

 Murilo,

A Lumis postará uma resposta em breve.

abraço,

Em 13/02/2012 10:47
Responder

 Murilo,

Se entendi corretamete, você já tem um relatório gerado e deseja exibi-lo dentro de uma página do seu portal, correto?
O Jasper Report gera uma página completa, por isso para ser exibi-la dentro de uma página do Lumis você pode usar um IFrame, que pode ser definido estaticamete usando uma interface do serviço de HTML (http://linx.lumis.com.br/doc/lumisportal/6.0.3.111130/help/index.htm?html.htm) do Lumis, ou customizando um controle para renderizar o IFrame.

O web.xml do Lumis Portal já está definido:

<servlet>
	<servlet-name>ReportImageServlet</servlet-name>
	<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
...
<servlet-mapping>
	<servlet-name>ReportImageServlet</servlet-name>
	<url-pattern>/lumis/service/report/img</url-pattern>
</servlet-mapping>

onde /lumis/service/report/img é o path que contém as imagens usadas pelo Jasper Report.

Você pode criar um JSP, que aponte para o relatório desejado, esta implementação usa a API do Jasper Report quase que exclusivamente, além de java obviamente.

showMyReport.jsp:

<%@ page import="Showmyrepotcontrollerpath.*" %><%
	ShowMyReportControllerHtml controller = new ShowMyReportControllerHtml(request, response);
	controller.handleRequest();
%>

Segue a implementação do controller:
 

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lumis.portal.PortalException;
import lumis.portal.UnexpectedException;
import lumis.portal.controller.ControllerHtml;
import lumis.portal.dao.jdbc.ITransactionJdbc;
import lumis.portal.manager.ManagerFactory;
import lumis.portal.transaction.PortalTransactionFactory;
import lumis.util.ITransaction;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXmlExporter;
import net.sf.jasperreports.engine.export.oasis.JROdtExporter;
import net.sf.jasperreports.engine.util.JRProperties;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

/**
 * Renders a JasperReport.
 */
public class ShowMyReportControllerHtml extends ControllerHtml
{
	static
	{
		// properties for the jdt-compiler to use J2SE 5 source level 
		JRProperties.setProperty("org.eclipse.jdt.core.compiler.source", "1.5");
		JRProperties.setProperty("org.eclipse.jdt.core.compiler.compliance", "1.5");
		JRProperties.setProperty("org.eclipse.jdt.core.compiler.codegen.TargetPlatform", "1.5");

		// ignore missing fonts
		JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
	}
	
	public ShowMyReportControllerHtml(HttpServletRequest request, HttpServletResponse response) throws PortalException
	{
		super(request, response, false);
	}
	
	@SuppressWarnings("unchecked")
	public void handleRequest() throws PortalException
	{
		if (!"GET".equals(request.getMethod()) && !"POST".equals(request.getMethod()))
			return;
		
		try
		{
			JasperPrint jasperPrint;
			ITransaction transaction = PortalTransactionFactory.createTransaction();
			try
			{
				transaction.begin();
				
				// create map with parameters for the report
				Map<String, Object> parameters = new HashMap<String, Object>();
				parameters.put(JRParameter.REPORT_LOCALE, sessionConfig.getLocale());
				
				// set runtime parameters
				Enumeration<String> parameterNames = request.getParameterNames();
				while (parameterNames.hasMoreElements())
				{
					String parameterName = parameterNames.nextElement();
					String parameterValue = request.getParameter(parameterName);
					
					parameters.put(parameterName, parameterValue);
				}
				
				// fill the report
				JasperReport jasperReport = getJasperReport("reportPath");
				{
					Connection connection = ((ITransactionJdbc)transaction).getConnection();
					jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
				}
				
				transaction.commit();
			}
			finally
			{
				transaction.dispose();
			}
			
			outputReport(jasperPrint);
		}
		catch (PortalException e)
		{
			throw e;
		}
		catch (Exception e)
		{
			throw new UnexpectedException(e);
		}
	}

	/**
	 * Returns the JasperReport object for the report in the specified path.
	 * @param reportPath the path to the report.
	 * @return the JasperReport object.
	 */
	private JasperReport getJasperReport(String reportPath) throws JRException
	{
		// compile the report
		//TODO: create an inputStream for your report file, this implementation can access only files relative to lumisdata/def, implement yours if want other path.
		InputStream reportInputStream = ManagerFactory.getDeploymentManager().getClassLoader().getResourceAsStream(reportPath);  
		if(reportInputStream == null)
			throw new IllegalArgumentException("Cannot find " + reportPath);

		JasperReport jasperReport = JasperCompileManager.compileReport(reportInputStream);

		return jasperReport;
	}
	
	/**
	 * Writes the page after set the right header to the HttpServletResponse.
	 * @param jasperPrint the compiled report.
	 */
	private void outputReport(JasperPrint jasperPrint) throws IOException, JRException
	{
		JRExporter exporter;
		String reportFormat = request.getParameter("reportFormat");
		
		if ("pdf".equals(reportFormat))
		{
			exporter = new JRPdfExporter();
			response.setContentType("application/pdf");
			response.addHeader("content-disposition", "attachment; filename=report.pdf");
		}
		else if ("rtf".equals(reportFormat))
		{
			exporter = new JRRtfExporter();
			response.setContentType("application/rtf");
			response.addHeader("content-disposition", "attachment; filename=report.rtf");
		}
		else if ("xml".equals(reportFormat))
		{
			exporter = new JRXmlExporter();
			response.setContentType("text/xml");
			response.addHeader("content-disposition", "attachment; filename=report.xml");
		}
		else if ("odt".equals(reportFormat))
		{
			exporter = new JROdtExporter();
			response.setContentType("application/vnd.oasis.opendocument.text");
			response.addHeader("content-disposition", "attachment; filename=report.odt");
		}
		else if ("xls".equals(reportFormat))
		{
			exporter = new JRXlsExporter();
			response.setContentType("application/vnd.ms-excel");
			response.addHeader("content-disposition", "attachment; filename=report.xls");
		}
		else
		{
			// create an HTML exporter
			exporter = new JRHtmlExporter();
			exporter.setParameter(JRHtmlExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
			exporter.setParameter(JRHtmlExporterParameter.IS_WRAP_BREAK_WORD, Boolean.TRUE);
			exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
			request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
			
			// path for report image repository defined in web.xml
			exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/lumis/service/report/img?" + ImageServlet.IMAGE_NAME_REQUEST_PARAMETER + "=");
			
			response.setCharacterEncoding("UTF-8");
		}
		
		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
		
		exporter.exportReport();
	}
}

abraço,

Em 13/02/2012 17:05
Responder
Gabriel Fernandes Salomão escreveu:

 Murilo,

Se entendi corretamete, você já tem um relatório gerado e deseja exibi-lo dentro de uma página do seu portal, correto?
O Jasper Report gera uma página completa, por isso para ser exibi-la dentro de uma página do Lumis você pode usar um IFrame, que pode ser definido estaticamete usando uma interface do serviço de HTML (http://linx.lumis.com.br/doc/lumisportal/6.0.3.111130/help/index.htm?html.htm) do Lumis, ou customizando um controle para renderizar o IFrame.

O web.xml do Lumis Portal já está definido:

<servlet>
	<servlet-name>ReportImageServlet</servlet-name>
	<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
...
<servlet-mapping>
	<servlet-name>ReportImageServlet</servlet-name>
	<url-pattern>/lumis/service/report/img</url-pattern>
</servlet-mapping>

onde /lumis/service/report/img é o path que contém as imagens usadas pelo Jasper Report.

Você pode criar um JSP, que aponte para o relatório desejado, esta implementação usa a API do Jasper Report quase que exclusivamente, além de java obviamente.

showMyReport.jsp:

<%@ page import="Showmyrepotcontrollerpath.*" %><%
	ShowMyReportControllerHtml controller = new ShowMyReportControllerHtml(request, response);
	controller.handleRequest();
%>

Segue a implementação do controller:
 

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lumis.portal.PortalException;
import lumis.portal.UnexpectedException;
import lumis.portal.controller.ControllerHtml;
import lumis.portal.dao.jdbc.ITransactionJdbc;
import lumis.portal.manager.ManagerFactory;
import lumis.portal.transaction.PortalTransactionFactory;
import lumis.util.ITransaction;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXmlExporter;
import net.sf.jasperreports.engine.export.oasis.JROdtExporter;
import net.sf.jasperreports.engine.util.JRProperties;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

/**
 * Renders a JasperReport.
 */
public class ShowMyReportControllerHtml extends ControllerHtml
{
	static
	{
		// properties for the jdt-compiler to use J2SE 5 source level 
		JRProperties.setProperty("org.eclipse.jdt.core.compiler.source", "1.5");
		JRProperties.setProperty("org.eclipse.jdt.core.compiler.compliance", "1.5");
		JRProperties.setProperty("org.eclipse.jdt.core.compiler.codegen.TargetPlatform", "1.5");

		// ignore missing fonts
		JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
	}
	
	public ShowMyReportControllerHtml(HttpServletRequest request, HttpServletResponse response) throws PortalException
	{
		super(request, response, false);
	}
	
	@SuppressWarnings("unchecked")
	public void handleRequest() throws PortalException
	{
		if (!"GET".equals(request.getMethod()) && !"POST".equals(request.getMethod()))
			return;
		
		try
		{
			JasperPrint jasperPrint;
			ITransaction transaction = PortalTransactionFactory.createTransaction();
			try
			{
				transaction.begin();
				
				// create map with parameters for the report
				Map<String, Object> parameters = new HashMap<String, Object>();
				parameters.put(JRParameter.REPORT_LOCALE, sessionConfig.getLocale());
				
				// set runtime parameters
				Enumeration<String> parameterNames = request.getParameterNames();
				while (parameterNames.hasMoreElements())
				{
					String parameterName = parameterNames.nextElement();
					String parameterValue = request.getParameter(parameterName);
					
					parameters.put(parameterName, parameterValue);
				}
				
				// fill the report
				JasperReport jasperReport = getJasperReport("reportPath");
				{
					Connection connection = ((ITransactionJdbc)transaction).getConnection();
					jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
				}
				
				transaction.commit();
			}
			finally
			{
				transaction.dispose();
			}
			
			outputReport(jasperPrint);
		}
		catch (PortalException e)
		{
			throw e;
		}
		catch (Exception e)
		{
			throw new UnexpectedException(e);
		}
	}

	/**
	 * Returns the JasperReport object for the report in the specified path.
	 * @param reportPath the path to the report.
	 * @return the JasperReport object.
	 */
	private JasperReport getJasperReport(String reportPath) throws JRException
	{
		// compile the report
		//TODO: create an inputStream for your report file, this implementation can access only files relative to lumisdata/def, implement yours if want other path.
		InputStream reportInputStream = ManagerFactory.getDeploymentManager().getClassLoader().getResourceAsStream(reportPath);  
		if(reportInputStream == null)
			throw new IllegalArgumentException("Cannot find " + reportPath);

		JasperReport jasperReport = JasperCompileManager.compileReport(reportInputStream);

		return jasperReport;
	}
	
	/**
	 * Writes the page after set the right header to the HttpServletResponse.
	 * @param jasperPrint the compiled report.
	 */
	private void outputReport(JasperPrint jasperPrint) throws IOException, JRException
	{
		JRExporter exporter;
		String reportFormat = request.getParameter("reportFormat");
		
		if ("pdf".equals(reportFormat))
		{
			exporter = new JRPdfExporter();
			response.setContentType("application/pdf");
			response.addHeader("content-disposition", "attachment; filename=report.pdf");
		}
		else if ("rtf".equals(reportFormat))
		{
			exporter = new JRRtfExporter();
			response.setContentType("application/rtf");
			response.addHeader("content-disposition", "attachment; filename=report.rtf");
		}
		else if ("xml".equals(reportFormat))
		{
			exporter = new JRXmlExporter();
			response.setContentType("text/xml");
			response.addHeader("content-disposition", "attachment; filename=report.xml");
		}
		else if ("odt".equals(reportFormat))
		{
			exporter = new JROdtExporter();
			response.setContentType("application/vnd.oasis.opendocument.text");
			response.addHeader("content-disposition", "attachment; filename=report.odt");
		}
		else if ("xls".equals(reportFormat))
		{
			exporter = new JRXlsExporter();
			response.setContentType("application/vnd.ms-excel");
			response.addHeader("content-disposition", "attachment; filename=report.xls");
		}
		else
		{
			// create an HTML exporter
			exporter = new JRHtmlExporter();
			exporter.setParameter(JRHtmlExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
			exporter.setParameter(JRHtmlExporterParameter.IS_WRAP_BREAK_WORD, Boolean.TRUE);
			exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
			request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
			
			// path for report image repository defined in web.xml
			exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/lumis/service/report/img?" + ImageServlet.IMAGE_NAME_REQUEST_PARAMETER + "=");
			
			response.setCharacterEncoding("UTF-8");
		}
		
		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
		
		exporter.exportReport();
	}
}

abraço,

 

Gabriel, fico muito agradecido pela ajuda. Mas meu problema é o seguinte. Tenho no meu doiu a seguinte interface: 

<interface id="relatorio">
			<controls>
				<control:lum_form>					
					<control:lum_interfaceHeader />					
					<control:lum_controlGroup>						
						<control:lum_interfaceButtons>
							<control:lum_okButton text="Ok">
								<onClick type="script"><script><![CDATA[LumisPortal.isSubmitting = false;]]></script></onClick>	
								<onClick type="processAction" processActionId="relatorio" />
								<onClick type="script"><script><![CDATA[LumisPortal.isSubmitting = false;]]></script></onClick>	
							</control:lum_okButton>
						</control:lum_interfaceButtons>
					</control:lum_controlGroup>
				</control:lum_form>
			</controls>
			<processActions>
				<processAction id="relatorio" type="generic" className="br.org.fenae.service.apcefspjogosintegracao2012finais.RelatorioProcessAction">
					<response type="doui_message" />
				</processAction>				
			</processActions>
		</interface>		

Que tem a seguinte classe:

package br.org.fenae.service.apcefspjogosintegracao2012finais;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.portlet.PortletSession;

import lumis.doui.processaction.ProcessActionHandler;
import lumis.portal.PortalContext;
import lumis.portal.PortalException;
import lumis.portal.dao.DaoException;
import lumis.portal.dao.jdbc.ITransactionJdbc;
import lumis.util.PortalUtil;

public class RelatorioProcessAction extends ProcessActionHandler {

	// Identificador do Conteudo a ser exportado
	private String id = PortalUtil.generateNewGuid();

	private StringBuilder relName = new StringBuilder();

	private StringBuilder filePath = new StringBuilder();

	public void processAction() throws PortalException {
		
		pesquisarConvenios();

		relName.append(PortalContext.getDefinitionPath("/FenaeApcefs/service/apcefspjogosintegracao2012finais/jasper/AtletasFinais"));
		relName.append(".jasper");		

		filePath.append("downloadRelatorio.jsp?id=");
		filePath.append(id);

		douiContext.getRequest().getPortletSession().setAttribute("relName", relName.toString(), PortletSession.APPLICATION_SCOPE);
		
	}

	private void pesquisarConvenios() throws DaoException {
		String sql = "SELECT"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_tipo` AS apcef_sp_jogos_inter2012_finais_apsp_tipo,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_nome` AS apcef_sp_jogos_inter2012_finais_apsp_nome,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_matricula` AS apcef_sp_jogos_inter2012_finais_apsp_matricula,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_lotacao` AS apcef_sp_jogos_inter2012_finais_apsp_lotacao,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_rg` AS apcef_sp_jogos_inter2012_finais_apsp_rg,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_sexo` AS apcef_sp_jogos_inter2012_finais_apsp_sexo,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_data_nascimento` AS apcef_sp_jogos_inter2012_finais_apsp_data_nascimento,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_cidade` AS apcef_sp_jogos_inter2012_finais_apsp_cidade,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_telefone` AS apcef_sp_jogos_inter2012_finais_apsp_telefone,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_celular` AS apcef_sp_jogos_inter2012_finais_apsp_celular,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_email` AS apcef_sp_jogos_inter2012_finais_apsp_email,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_sr` AS apcef_sp_jogos_inter2012_finais_apsp_sr,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_atletismo_feminino` AS apcef_sp_jogos_inter2012_finais_apsp_atletismo_feminino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_atletismo_masculino` AS apcef_sp_jogos_inter2012_finais_apsp_atletismo_masculino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_natacao_absoluto_feminino` AS apcef_sp_jogos_inter2012_finais_apsp_natacao_absoluto_feminino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_natacao_absoluto_masculino` AS apcef_sp_jogos_inter2012_finais_apsp_natacao_absoluto_masculino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_natacao_master_feminino` AS apcef_sp_jogos_inter2012_finais_apsp_natacao_master_feminino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_natacao_master_masculino` AS apcef_sp_jogos_inter2012_finais_apsp_natacao_master_masculino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_corrida_5km_feminino` AS apcef_sp_jogos_inter2012_finais_apsp_corrida_5km_feminino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_corrida_5km_masculino` AS apcef_sp_jogos_inter2012_finais_apsp_corrida_5km_masculino,"
					+ " apcef_sp_jogos_inter2012_finais.`apsp_observacao` AS apcef_sp_jogos_inter2012_finais_apsp_observacao"
					+ " FROM"
					+ " `apcef_sp_jogos_inter2012_finais` apcef_sp_jogos_inter2012_finais";					
		ITransactionJdbc daoTransactionJdbc = (ITransactionJdbc) transaction;
		Connection connection = daoTransactionJdbc.getConnection();
		PreparedStatement statement = null;
		try {
			statement = connection.prepareStatement(sql);			
		} catch (SQLException e1) {
			e1.printStackTrace();
		} finally {
			try {
				if (statement != null) {
					statement.close();
				}
			} catch (Exception e) {
			}
			try {
				if (connection != null) {
					connection.close();
				}
			} catch (Exception e) {
			}
		}
	}
}

e

package br.org.fenae.service.apcefspjogosintegracao2012finais;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lumis.portal.PortalException;
import lumis.portal.transaction.PortalTransactionFactory;
import lumis.util.ITransaction;
import lumis.util.log.ILogger;
import lumis.util.log.LoggerFactory;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;

public class DownloadRelatorio {

	private static ILogger logger = LoggerFactory.getLogger(DownloadRelatorio.class);

	/** Identificador do contéudo a ser baixado alocado na sessão * */
	HttpServletRequest request;
	HttpServletResponse response;

	private String id;
	private String relName;
	private String relType;
	private ITransaction transaction;
	private JasperPrint jasperPrint;
	private String nameRel[] = null;

	public DownloadRelatorio(HttpServletRequest request, HttpServletResponse response) throws PortalException {
		this.request = request;
		this.response = response;
		id = request.getParameter("id");

		// Referencia o objeto Excel presente na sessão
		relName = (String) request.getSession().getAttribute("relName");
		nameRel = relName.split("jasper/");
		relType = (String) request.getSession().getAttribute("relType");
	}

	/**
	 * Carrega e efetuada o download do arquivo
	 * 
	 * @throws PortalException
	 */
	public void gerarRelatorio() throws PortalException {
		try {
			try {
				transaction = PortalTransactionFactory.getTransaction();
				transaction.begin();				

				
				Map parameters = null;
				jasperPrint = JasperFillManager.fillReport(id, parameters);

				outPutReport(jasperPrint);

				transaction.dispose();
			} catch (Exception e) {
				throw new PortalException(e.getMessage());
			}
		} finally {
			request.getSession().removeAttribute(id);
			request.getSession().removeAttribute("relName");
			request.getSession().removeAttribute("relType");
			request.getSession().removeAttribute("parametros");
		}
	}

	private void outPutReport(JasperPrint jasperPrint) throws IOException, JRException {

		JRExporter exporter;

		exporter = new JRPdfExporter();
		response.setContentType("application/pdf");
		response.addHeader("content-disposition", "attachment; filename=report.pdf");
		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

		exporter.exportReport();
	}
}

 Preciso, que quando clicar no botão o PDF é renderizado na tela, o usuário pode imprimir ou salvar. A dificuldade é como fazer isso. Entedeu?

 

Grato.

Em 13/02/2012 18:04
Responder

Acompanhar pergunta

Receba atualizações e novas respostas por e-mail, e ajude a resolver as dúvidas da comunidade.

Realize Login para poder seguir!