Impressao flex

12 respostas
D

Ola, eu tenho um projeto Flex, BlazeDS, e java.

Terminei uma tela de venda, e precisava gera uma impressao para ser entregue ao cliente.

E flex existe algum report ou coisa assim ?

Como voces me indicaria fazer essas impressoes ?
Inclusive relatorios

12 Respostas

Roney_Edson_Raranhan

Olá.
vc já viu fala de ferramenta ireport, é bem facil utilizar principalmente com as tecnologias que vc esta usando! No flex vc dispara uma url direcionada para um servlet que chama os relatorios desenvolvidos no ireport que exibe no formato pdf. Se interessar mais em saber como faz me rosponda! att…

D

Opa, acho que interessou sim, pois eu nao tenho nem ideia como vou fazer recibos etc no flex.

Acho que isso pode ser uma saida.

Se puder ajudar agradeco

claudneto

http://livedocs.adobe.com/flex/3/html/help.html?content=printing_1.html

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/printing/FlexPrintJob.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2

Veja se esses links te ajudam. São classes próprias do Flex para fazer impressões.

Roney_Edson_Raranhan

Olá,
Primeiramente estou postando o exemplo de um metodo usando URLRequest, que dispara uma url em direção a o servlet, passando como parametro duas data [ inicial , final].

<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.managers.PopUpManager;
			
			public function gerar():void{
				var dtIni:String;
				var dtFin:String;
				
				dtIni = dataInicial.text;
				dtFin = dataFinal.text;			
			        var request:URLRequest = new URLRequest("http://localhost:8080/Projeto/ServletRelatorio?relatorio=osData&       dataInicial="+dtIni+"dataFinal="+dtFin"); 
					navigateToURL(request, "_blank");
					PopUpManager.removePopUp(this);
			   }
			}
		]]>
	</mx:Script>

Aqui esta um exemplo de servlet, que recebe os dados via parametro da url e repassa-os para gerar o relatório.

package servlet;

import java.io.IOException;
import java.sql.Connection;
import java.util.Date;
import java.util.HashMap;

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


import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import util.ConexaoFactory;

/**
 * Servlet implementation class for Servlet: geraRelatorio
 * 
 */
public class ServletRelatorio extends HttpServlet {

	static final long serialVersionUID = 1L;
	@SuppressWarnings("unused")
	private static String caminhoJava;
	
     //Para abrir a conexão com o banco é necessario emprementar uma classe no java só para fazer a requesição de abrir as sessões com banco.
	private Connection conexao;

	public ServletRelatorio() {
		conexao = ConexaoFactory.getConnection();
	}

	@SuppressWarnings("unchecked")
	public void doGet(HttpServletRequest request, HttpServletResponse response) {

		caminhoJava = this.getServletContext().getRealPath("WEB-INF/classes");
		
                // o getParameter é responsavel por recuperar os parametros passado pela url.
		String relatorio = request.getParameter("relatorio");

                // compara se o relatorio é do gerar Os Por data.
		if(relatorio.equals("osData")){
			try {
				relatorioOsPorData(request, response);
			} catch (JRException e) {
				e.printStackTrace();
			}
		}
	}
	
	

	/**
	 * metodo que gera relatorio de ordem de servico por data
	 * @param request
	 * @param response
	 * @throws JRException 
	 */
	@SuppressWarnings("unchecked")
	private void relatorioOsPorData(HttpServletRequest request, HttpServletResponse response) throws JRException {
		HashMap parametro = new HashMap();
		
		@SuppressWarnings("unused")
		Date dataInicial, dataFinal = null;
		String relatorio = caminhoJava + "\\relatorio/osData.jasper";
		
		String dtInicial = request.getParameter("dataInicial");
		String dtFinal = request.getParameter("dataFinal");
		
                //É necessario emprementar uma classe para formatação das data para [Date]
		dataInicial = util.Funcoes.FormataData(dtInicial);
		dataFinal = util.Funcoes.FormataData(dtFinal);
		
		parametro.put("dataInicial", dataInicial);
		parametro.put("dataFinal", dataFinal);
		
		byte[] pdf = JasperRunManager.runReportToPdf(relatorio, parametro, conexao);
		this.exibirRelatorio(pdf, response);
	}

	/** metodo que exibe os relatorios* */
	public void exibirRelatorio(byte[] relatorio, HttpServletResponse response) {
			ServletOutputStream out = null;
			response.setContentType("application/pdf");
			try {
				out = response.getOutputStream();
				out.write(relatorio);
			} catch (IOException e) {
				e.printStackTrace();
			}	
	}
}

Mas para funcionar é preciso o arquivo do relatório gerado pela ireport, estar dentro do sistema, o arquivo.jasper.
Para saber mais como usar a ferramenta Ireport é cadastrar nesse site[ www.integrator.com.br ] lá vc encontrar apostilas RelatoriosJasperReports
E tambem é necessario adicinar a o projeto algumas Lib especificas do Ireport para gerar os relatórios.

D

Cara, to apanhando um pouco nesse codigo.
Pesquisei bastante e nao to achando.

ta dando erro no

Acredito ser uma lib faltando, mais nao to conseguindo acha ela.

pode me ajuda

luistiagos

se não quiser depender de ireport pra isto… tem uma api que roda 100% no client para geração de pdf…

http://www.google.com.br/url?sa=t&source=web&cd=1&ved=0CBoQFjAA&url=http%3A%2F%2Falivepdf.bytearray.org%2F&ei=kOcITdPdKYrWrQelo73VDg&usg=AFQjCNH_1GWoHFokUA4wSFVH-GRYcpw56A&sig2=Ir0ti5fASAy2YaYHvgyjuw

D

Nao entendi. Iria precisar de todo jeito do ireport para gerar?
So que o flex que iria gerar o pdf do jasper ?

Roney_Edson_Raranhan

Olá,
Esse erro não é de lib, é que a classe ConexaoFactory não existe.
Pois está clase que abre a sessão com o banco de dados para gerar o relátorio.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConexaoFactory {
	
	public ConexaoFactory(){
		init();
	}
	
	static Connection con = null;
	
	public void init(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			System.out.println("Ocorreu erro ao carregar o driver!" + e.getMessage());
		}
	}
	
	public static Connection getConnection(){
		try {
		  if((con == null)||(con.isClosed())){
			con = DriverManager.getConnection("jdbc:mysql://localhost/projeto","root","");
			System.out.println("Conexão obtida com sucesso!");
		  }

		} catch (SQLException e) {
			System.out.println("SQLException"+e.getMessage());
		}catch (Exception e) {
			System.out.println("SQLException"+e.getMessage());
		}
		return con;
	}
	
	public void closeConnection(){
		try {
			if((con == null)&&(!con.isClosed())){
				con.close();
				System.out.println("Conexão encerrada!");
			}
		} catch (Exception e) {
			System.out.println("SQLException"+e.getMessage());
		}
	}
}

Com certeza esta classe tambem esta faltando, que é ela que converte as String para Date
Da uma olhada só para conferir.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Funcoes {

	/** metodo que transforma string para date * */
	public static Date FormataData(String data) {

		Date dataF = null;
		try {

			SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
			dataF = (java.util.Date) formato.parse(data);

		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dataF;
	}
}

Qualquer duvida, pode perguntar,
Espere que sirva de ajuda e que vc consigua fulfar esse projeto.
valeuu Att…

D

Por favor, alguem poderia simplificar o codigo Roney.

Estou a mais de uma semana tentando fazer isso e nao estou conseguindo.

Se alguem puder ajudar agradeco.

Ou tem algum exemplo mais simples

D

Esse codigo ja parece simples, porem sempre tudo que faco da esse erro.

Ate manti os nomes do packete ve se podia ser algo
o erro que da e o seguinte

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Error instantiating servlet class servlet.ServletRelatorio
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Unknown Source)


root cause 

java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JRException
	java.lang.Class.getDeclaredConstructors0(Native Method)
	java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	java.lang.Class.getConstructor0(Unknown Source)
	java.lang.Class.newInstance0(Unknown Source)
	java.lang.Class.newInstance(Unknown Source)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Unknown Source)


root cause 

java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRException
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
	java.lang.Class.getDeclaredConstructors0(Native Method)
	java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	java.lang.Class.getConstructor0(Unknown Source)
	java.lang.Class.newInstance0(Unknown Source)
	java.lang.Class.newInstance(Unknown Source)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Unknown Source)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.29
Roney_Edson_Raranhan

Poste algum email que envio um projeto funcionando, como exemplo.
Vc tem que configurar no arquivo web.xml o servlet.

D

Opa, por favor
e [email removido]

Criado 10 de dezembro de 2010
Ultima resposta 22 de dez. de 2010
Respostas 12
Participantes 4