JSP + IReport

tem como fazer pelo jasper pois mais de uma pessoa pode acessar o relatorio ao mesmo tempo.

Como assim pelo jasper? Não entendi… Se vc estiver se referindo aquele visualizador que tem no ireports (JRViewer), não é possivel, pois ele é só para aplicações locais.

Por este motivo que no exemplo eu sempre gero um arquivo com a data e hora da geração.

se o usuário 1 mandar gerar o relatório ás 04/11 15:34:00 e o usuario 2 mandar gerar 1 segundo depois, ele não vai sobrescrever o anterior, pois o nome estará diferente:

meuRelatorio_04_11_15_34_00
meuRelatorio_04_11_15_34_02

Se vc tem mesmo MUITOS acessos, que em questão de 1 segundo ainda corre o perigo de sobrescrever o relatorio, vc pode tentar apelar pra, além dos segundos, colocar centésimos, milésimos, etc…

ou vc podeconcatenar tmb o nome do usuario no nome do arquivo, aí se os dois usuarios realmente derem a sorte de mandar gerar ao mesmo tempo, não terá problemas:

user1_MeuRelatorio_04_11_15_34_00
user2_MeuRelatorio_04_11_15_34_00

e como eu posso abrir esse relatorio ???

Passa o a URL do arquivo gerado pro usuario clicar e abrir…

http://www.blablabla.com.br/temporarios/NomeDoRelatorioGerado

ou então no seu próprio JSP, após gerado o arquivo PDF, redireciona o usuario para o arquivo usando sendRedirect…

provavelmente o relatorio será aberto no Acrobat do usuario…

como eu faço via sendredirect???

response.sendRedirect(“temporarios/relatorio.pdf”);

ou

response.sendRedirect(“http://www.site.com.br/temporarios/relatorio.pdf”);

Aproveitando o post…
Estou com problemas para a criação do relatorio “zebrado”.
A solucao do retangulo atrás dos fields não serve pois meus fields podem esticar se excederem,entao o retangulo nao ira se adequar.
Imaginei uma solucao onde pudesse acessar via codigo o background do field para setar cor ou nao mediante um teste.
Alguem já fez algo que nao seja isso do retangulo?
Aguardo ajuda :stuck_out_tongue:

Já consegui fazer o zebrado :lol:

http://www.guj.com.br/posts/list/108763.java :wink:

Bom, no meu caso o problema é outro:

[quote]HTTP Status 500 -

type Exception report

org.apache.jasper.JasperException: An exception occurred processing JSP page /imprimir001.jsp at line 27

24: parameters.put(“pdirectory”, application.getRealPath(""));
25:
26: byte[] bytes =
27: JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);
28:
29: response.setContentType(“application/pdf”);
30: response.setContentLength(bytes.length);

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
[/quote]

O código que estou usando é este:

[code]<%@page contentType=“text/html” pageEncoding=“iso-8859-1”%>
<%@page import=“java.util.HashMap,java.util.Map,
net.sf.jasperreports.engine.,net.sf.jasperreports.view.JasperViewer"%>
<%@page import=“database.Conexao”%>
<%@page import="java.sql.
”%>
<%@page import=“java.io.*”%>

<%
String imprimir = request.getParameter(“imprimir”);
if (imprimir != null) {

Connection conn = Conexao.getConection();
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(“SELECT * FROM voluntapae WHERE idvolunt = ?”);
pstmt.setObject(1, imprimir);
rs = pstmt.executeQuery();
rs.next();

File reportFile = new File(application.getRealPath("/reports/volunt.jasper"));

Map parameters = new HashMap();
parameters.put(“pcd_slip”, imprimir); // o que eu faço aqui?
parameters.put(“pdirectory”, application.getRealPath("")); // e aqui?

byte[] bytes =
JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn); // mostra erro nesta linha

response.setContentType(“application/pdf”);
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();

rs.close();
}
catch(Exception e){
response.sendRedirect(“msg_err.jsp”); // caso haja erro, vai pra outra página
out.println(e);
} // catch
finally {
if (conn != null) conn.close();
}
}
%>
[/code]

Faz muito tempo que eu utilizei o IReport, então por isso estou sem prática.

O select no IReport deve ser com cláusulas WHERE recebendo parâmetros com ? ou apenas o select puro?
É que vou utilizar o IReport capturando parâmetros de um link de imprimir, daí não sei se o select pra apenas uma linha da tabela deve ser no IReport ou na página.

Espero uma contribuição de vocês.

Obrigado.
[]s

Alguns métodos mudaram de nome por uma questão de consistência. Neste caso o
novo nome é getPlainWidth().

qualquer coisa substitua a biblioteca do iText denovo e cola uma nova lá

Alguns métodos mudaram de nome por uma questão de consistência. Neste caso o
novo nome é getPlainWidth().

troque sua bliblioteca do iText e cole uma novinha la tbm

bem… até onde eu sei no where voce nao coloca a “?”, mas sim um paramêtro criado lá no iReport.Tenta dessa forma
Espero ter ajudado :smiley:

Vc quer dizer parâmetros assim:

No assistente de novo documento, adicione uma query normal, depois
em Data e clique na opçãp Query do Relatório

Na caixa de Query do Relatório, clique no botão Query Designer.
Na caixa de diálogo SQL Query Designer, no quadro a direita, na tabela onde receberá o parâmetro, clique com o botão direito do mouse sobre o campo algumacoisaID. No menu de contexto, selecione o item add where condition.

Ao surgir a caixa de diálogo Condição do resultado, digite na área de texto, abaixo da palavra subquery:

$P{PAR_PEDID}

Você vai precisar dos seguintes JARS:

[quote]1. commons-beanutils-1.7.jar
2. commons-collections-2.1.jar
3. commons-digester-1.7.jar
4. commons-javaflow-20060411.jar
5. commons-logging-api-1.0.2.jar
6. itext-1.3.1.jar
7. jasperreports-2.0.2.jar
[/quote]

O código pra acesso do Relatório é:

[code]import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class Main {

public static void main(String[] args) {
	Connection conn = null;

	try {
		 //cria a conexão com o banco de dados
		Class.forName("com.mysql.jdbc.Driver");
		String db = "jdbc:mysql://localhost:3306/relatorios";
		conn = DriverManager.getConnection(db,"root","123456");

		System.out.println("Gerando relatório...");

		HashMap<String, Integer> parameterMap = 
					new HashMap<String, Integer>( );
		 //o Nome do parâmetro e o valor é passado ao HashMap
		parameterMap.put("PAR_PEDID", 10248);

		 //pega o caminho físico até o arquivo .jasper
		String arquivo = System.getProperty("user.dir") + "/relatorios/relatorio.jasper";

//chama fillReport
JasperPrint jp = JasperFillManager.fillReport(arquivo, parameterMap, conn); // quando executo, mostra erro aqui

		 //exibe o relatório com viewReport
		JasperViewer.viewReport(jp, false);
        
	} catch (SQLException ex) {
        ex.printStackTrace();
	} catch (ClassNotFoundException ex) {
        ex.printStackTrace();
	} catch (JRException e) {
        e.printStackTrace();
	} finally {
        try {
            if (!conn.isClosed()) {
                conn.close();
            }
            System.out.println("Finalizado!");
        } catch (SQLException ex) {}
	}
}

}
[/code]

Mas nunca conseguir executar oO

Ele gera erro na linha 31

As únicas mensagens mostradas na tela são: Gerando relatório… e Finalizado!

Excessões:

java.lang.ClassCastException: cannot assign instance of net.sf.jasperreports.engine.base.JRBaseRectangle to field net.sf.jasperreports.engine.base.JRBasePen.penContainer of type net.sf.jasperreports.engine.JRPenContainer in instance of net.sf.jasperreports.engine.base.JRBasePen at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2032) at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1212) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1951) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at java.util.ArrayList.readObject(ArrayList.java:593) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1846) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:88) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:232) at Main.main(Main.java:31)

Sou novo aqui no fórum e também sou novo em JAVA.
E este exemplo é para classes java e não para JSP.
Também gostaria de ver um exemplo simples para visualizar e poder escolher quais formatos imprimir para web com JasperView.

Algum membro possui algum conhecimento para nos ajudar?

Grato pela atenção!

Até.