Fala galera!
Estou tentando fazer meu primeiro relatório com ireport utilizando codigos do struts e do hibernate.
Eu criei dentro do ireport uma configuração de conexão em branco, e montei um relatorio simples para mostrar a lista que busquei no banco de dados.(não sei se fui mto claro, mas vamos prosseguir).
Pois bem, ao criar as classes, fiz conforme os codigos abaixo:
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServlet;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
public class RelProduto extends HttpServlet{
public byte[] exibirRelatorio(List list) {
// Caminho do .jasper
String Relatorio = "Relatorio_Produto.jasper";
// O datasource
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
byte[] bytes = null;
try {
//ServletContext context = getServletContext();
JasperReport relatorioJasper1 = (JasperReport) JRLoader.loadObject("d:/tomcat/webapps/teste2/reports/Relatorio_produto.jasper");
bytes = JasperRunManager.runReportToPdf (relatorioJasper1,new HashMap(), ds );
} catch (JRException e) {
System.out.println(e.getMessage());
}
return bytes;
}
}
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.Session;
import br.unig.teste.dao.ProdutoDao;
import br.unig.teste.hibernate.HibernateFactory;
import br.unig.teste.modelo.Produto;
import br.unig.teste.relatorio.RelProduto;
public class ConsultaAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res){
Session session = new HibernateFactory().getSession();
Produto produto = (Produto)form;
List produtoEncontrado = new ProdutoDao(session).pesqNome(produto);
req.setAttribute("PRODUTOENCONTRADO",produtoEncontrado);
byte[] bytes = new RelProduto().exibirRelatorio(produtoEncontrado);
System.out.println(bytes.length);
//Gerando a Saída
res.setContentType("application/pdf");
res.setContentLength(bytes.length);
ServletOutputStream ouputStream;
try {
ouputStream = res.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mapping.findForward(null);
}
}
Acontece q qdo eu faço uma pesquisa em um jsp e dou um submit, ele abre uma janela para salvar “ConsultaAction.do”, ao inves do pdf que tentei montar para imprimir.
Se alguem puder me ajudar, agradeço!!!
Valeu pela matéria. Eu já dei uma olhada, mas o que me deixa intrigado msm é que um amigo me passou essa maneira(a que eu postei) e conseguiu fazer relatorio.Mas ele não fez com struts.Ele fez da seguinte forma:
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
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.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import br.unig.dao.ItemDao;
public class Relatorio extends HttpServlet {
private static final long serialVersionUID = 1L;
public byte[] exibirRelatorio(Collection collection) {
// Caminho do .jasper
String Relatorio = "JRItem.jasper";
// O datasource
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(collection);
byte[] bytes = null;
try {
ServletContext context = getServletContext();
JasperReport relatorioJasper1 = (JasperReport) JRLoader.loadObject( context.getRealPath(Relatorio));
bytes = JasperRunManager.runReportToPdf (relatorioJasper1,new HashMap(), ds );
/*
InputStream relatorioJasper = getClass().getResourceAsStream(Relatorio);
JasperPrint impressao = null;
impressao = JasperFillManager.fillReport(relatorioJasper, new HashMap(), ds);
JasperViewer viewer = new JasperViewer(impressao, true);
viewer.setVisible(true);
*/
} catch (JRException e) {
System.out.println(e.getMessage());
}
return bytes;
}
@Override
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(arg0, arg1);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse arg1) throws ServletException, IOException {
// Definindo Collection
Collection ColecaoItem = new ItemDao().findAll();
//Criando o Vetor de Bytes para PDF
byte[] bytes = exibirRelatorio( ColecaoItem);
//Gerando a Saída
arg1.setContentType("application/pdf");
arg1.setContentLength(bytes.length);
ServletOutputStream ouputStream;
try {
ouputStream = arg1.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Deve ser algum detalhe, não sei…rs
Consegui…realmente era detalhe…reinstalei o acrobat reader e funcionou.
kra vc fez com Servlet e deu certo…
Mas vc conseguiu com Struts???
Estou numa duvida de colocar Servlet no Struts 1.
Se pode deixar um exemplo agradeço desde já!
me manda seu e-mail que depois te mando.
oi ai esta meu codigo
[code] import java.io.*;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
//import javax.swing.JOptionPane;
public class Dados{
//"args" é um array de String onde cada elemento é um argumento passado pela linha de comando momento na "inicialização" da execução.
public static void main(String[] args){
Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();
try {
//leitura do ficheiro, prepara-o para ser aberto
BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));
String str;
int i = 0;
//vai percorrer todo o ficheiro
while((str = in.readLine()) != null)
{
if(str.startsWith("#"))
{
str= "";
}
else{ //esta a dividir a frase em varias strings imprimindo o seu resultado
List<String> values = new ArrayList<String>();
String words[] = str.split(";");
for(String word : words) {
values.add(word);
System.out.println(word);
}
mapLines.put(i, values);
i++;
}
}// fim do while
in.close();
} catch (IOException e){
// possiveis erros são tratatos aqui
//JOptionPane.showMessageDialog(null, this.word, "NÂO FOI POSSÍVEL ABRIR O SEU FICHEIRO", JOptionPane.ERROR_MESSAGE);
System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");
}
// Apresenta o contéudo do Map
Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();
for(Integer key : m.keySet()) {
for(String word : m.get(key)) {
System.out.println(word);
}
}
}
public static void main2(String[] args){
Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();
try {
BufferedReader in2 = new BufferedReader(new FileReader("conteudo2.txt"));
String str;
int i = 0;
while((str = in2.readLine()) != null)
{
if(str.startsWith("#"))
{
str= "";
}
else{ //esta a dividir a frase em varias strings
List<String> values = new ArrayList<String>();
String words[] = str.split(" ");
for(String word : words) {
values.add(word);
System.out.println(word);
}
mapLines.put(i, values);
i++;
}
}// fim do while
in2.close();
} catch (IOException e){
// possiveis erros são tratatos aqui
System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");
}
// Apresenta o contéudo do Map
Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();
for(Integer key : m.keySet()) {
for(String word : m.get(key)) {
System.out.println(word);
}
}
}
} [/code]
e tenho por exemplo este ficheiro
961234567 253883377 24:05:2011 10:30:10 068 16 13
963456789 253883355 28:05:2011 12:15:17 088 12 09
963456789 253883377 29:05:2011 17:00:00 120 14 11
969876666 253883377 30:05:2011 10:05:34 070 11 09
961234567 253883377 31:05:2011 22:30:05 066 14 11
961234567 253883377 02:06:2011 14:19:41 076 15 13
963456789 253883377 05:06:2011 11:33:34 085 07 06
e queria que fosse pedido ao utilizador que dados e que ele quer imprimir. por exemplo…pedirmos para imprimir todos os dados com o numero 961234567
abraços