ola pessoal, tudo bem …
criei um relatorio no ireport na minha aplicacao destop, como faco pra export esse relatorio pra um arquivo pdf ???
obrigado
ola pessoal, tudo bem …
criei um relatorio no ireport na minha aplicacao destop, como faco pra export esse relatorio pra um arquivo pdf ???
obrigado
Tenta assim:
(na classe que irá disparar o relatório)
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
try {
List oConteudoDoRelatório = new ArrayList();
JasperDesign jasperDesign = null;
Map parameters = new HashMap();
parameters.put("Title", "Um Relatório a ser impresso");
jasperDesign = JRXmlLoader.load("/var/company/app/config/SegundaViaSTFC.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(oConteudoDoRelatório);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds);
response.reset();
response.setHeader("Content-disposition", "attachment; filename=" + "SegundaVia.pdf");
response.setContentType("application/pdf");
OutputStream out = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, out);
out.flush();
out.close();
} catch (IOException e) {e.printStackTrace();}
catch (JRException e) {e.printStackTrace();}
catch (Exception e) {e.printStackTrace();}
Att.
Guilherme
ok, entendi
mas como faco pra abrir o relatorio, para que depois de criado o pdf, seja visualizado, tem como o java ja fazer isso, abrir esse arquivo pdf criado
obrigado
O exemplo que foi postado acima, não pode ser utilizado em uma aplicação Desktop, porque utiliza a HTTPServletRequest/HttpServletResponse.
Para uma aplicação Desktop você poderá utilizar a própria API para abrir um vizualizador de PDF.
Guilherme,
Voce sabe se um sistema em java para desktop, tem como criar uma classe para chamar e executar um relatório feito em ireport? è possivel a gente a partir de um menu, chamar um relatório do ireport? voce já viu ou sabe da exeistencia de algum exemplo que faça isso? Eu e muitos outros colegas, estamos aqui no fórum a procura disso mas tá tão dificiL!..
Quem sabe voce nos ajuda…
Ficarei muito grato,
Edson
amamorim, eu tenho algumas versoes que chamam um relatorio feito em .jsaper.
mas ela so funciona localmente, quando eu coloco na web via java web start, nao funciona mais nada, sendo que cada versao da um erro diferente …
nao sei se quer colocar seu programa na web ou nao, mas posso te ajudar …
se for o caso, me manda um email: marcoscorso@terra.com.br
ok
Amamorim, marcoscorso:
Este exemplo mostra como um relatório pode ser gerado em um contexto local. A única coisa que eu realmente não consegui foi fazer com que ao executar este código o relatório abrisse automaticamente como ocorre na aplicação web. Neste caso o pdf gerado é salvo no diretório raiz da aplicação.
Então em sua aplicação ao clicar em um botão como “gerar relatório”, de certa forma você poderia instanciar um objeto contento uma lógica como a do exemplo, para que o relatório seja gerado. Mas voltando a repetir não consegui em um ambiente local fazer com que este seja aberto automaticamente.
ReportIntro.java
package com.beta;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
public class ReportIntro {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Map parameters = new HashMap();
parameters.put("Titulo", "Relatorio de teste");
try {
JasperDesign jasperDesign = JRXmlLoader.load("com/beta/reportIntro.jrxml");
//dados que serão listados no relatório:
//estou populando a lista manualmente para o exemplo
//mas os dados podem estar sendo carregados do banco como por exemplo
//com o uso do hibernate
List<ReportBean> list = new ArrayList<ReportBean>();
ReportBean reportBean = new ReportBean();
reportBean.setEndereco("Titulo");
reportBean.setNome("um nome");
reportBean.setEndereco("Rua x, 123");
list.add(reportBean);
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds);
JasperExportManager.exportReportToPdfFile(jasperPrint, "Relatorio.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
}
reportIntro.jrxml
[code]<?xml version="1.0" encoding="UTF-8" ?>
<field name="nome" class="java.lang.String"/>
<field name="endereco" class="java.lang.String"/>
<background>
<band height="0" isSplitAllowed="true" >
</band>
</background>
<title>
<band height="30" isSplitAllowed="true" >
</band>
</title>
<pageHeader>
<band height="20" isSplitAllowed="true" >
<staticText>
<reportElement
mode="Transparent"
x="228"
y="3"
width="50"
height="15"
forecolor="#000000"
backcolor="#FFFFFF"
key="staticText"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Top" rotation="None" lineSpacing="Single">
<font reportFont="Arial_Bold" pdfFontName="Helvetica" isBold="false"/>
</textElement>
<text><![CDATA[Nome]]></text>
</staticText>
<staticText>
<reportElement
mode="Transparent"
x="300"
y="4"
width="44"
height="15"
forecolor="#000000"
backcolor="#FFFFFF"
key="staticText"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Top" rotation="None" lineSpacing="Single">
<font reportFont="Arial_Bold" pdfFontName="Helvetica" isBold="false"/>
</textElement>
<text><![CDATA[Endereço]]></text>
</staticText>
</band>
</pageHeader>
<columnHeader>
<band height="0" isSplitAllowed="true" >
</band>
</columnHeader>
<detail>
<band height="20" isSplitAllowed="true" >
<textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
mode="Transparent"
x="223"
y="2"
width="50"
height="15"
forecolor="#000000"
backcolor="#FFFFFF"
key="textField"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Top" rotation="None" lineSpacing="Single">
<font reportFont="Arial_Normal"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{nome}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
mode="Transparent"
x="289"
y="2"
width="73"
height="15"
forecolor="#000000"
backcolor="#FFFFFF"
key="textField"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Top" rotation="None" lineSpacing="Single">
<font reportFont="Arial_Normal"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{endereco}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="0" isSplitAllowed="true" >
</band>
</columnFooter>
<pageFooter>
<band height="0" isSplitAllowed="true" >
</band>
</pageFooter>
<summary>
<band height="0" isSplitAllowed="true" >
</band>
</summary>
[/code]
Não sei se este básico exemplo poderá te ajudar, mas qualquer coisa entre em contato.
Eu desenvolvi algumas aplicações que geram relatórios pdf no contexto web, onde ao clicar no ícone para se gerar o relatório este abre automaticamente, mas creio que para vcs o contexto web não seja o caso.
espero ter ajudado
att.
ola …
vou verificar aqui …
e para chamar um relatorio feito no ireport (.jasper) para acessar via java web start, como devo fazer, pois usei o seguinte codigo :
package teste;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
public class IReportExemple {
public IReportExemple() {
}
public void gerar( String jasperFile ) throws JRException , SQLException, ClassNotFoundException {
try{
Class.forName( "org.postgresql.Driver" );
Connection con = DriverManager.getConnection( "jdbc:postgresql://10.1.1.1:5432/teste" , "teste" , "teste" );
Statement stm = con.createStatement();
String query = "select * from teste";
ResultSet rs = stm.executeQuery( query );
JRResultSetDataSource dataSource = new JRResultSetDataSource( rs );
URL file = getClass().getResource("untitled_report_1.jasper") ;
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(file);
HashMap parameters = new HashMap();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters , dataSource );
JasperViewer jrviewer = new JasperViewer( jasperPrint, false );
jrviewer.setVisible(true);
} catch ( Exception e ) {
JOptionPane.showMessageDialog( null, "Erro:\n " + e.toString());
}
}
public static void main(String[] args) {
try {
new IReportExemple().gerar( "untitled_report_1.jasper" );
} catch (Exception e) {
e.printStackTrace();
}
}
}
quando eu executo localmente, funciona, quando eu executo na web, via java web start, da o seguinte erro :
error loading expression class
o que eu faco ???
Olá…
Então, neste caso eu realmente não sei como ajudar pois trabalho mesmo com aplicações web, sem ser no contexto de utilização de WebStart, por curiosidade estava vendo algo sobre web start por aqui mas não consegui executar o exemplo com WebStart. Mas consegui executar o exemplo que vc postou, de maneira local..
att.
Guilherme.
esse eh o problema …
local funciona …
no webstart nao
se souber de alguem que conheca e que possa me ajudar, eu agradeco
[/b]
Certo pessoal eu estou usando o ireport 2.0 e estou tentando gerar um relatório em pdf para depois tentar usar na minha aplicação do eclipse.
Como eu faço pra gerar o relatatório no ireport e em pdf??
Toda vez que eu tento fazer isso (Visualizar em pdf) etambém eu busco o AcroRd32.exe, ele não consegue abrir, e em outros tb: html, txt, xls.
O que eu estou fazendo de errado?
Abração.
Desde já agradeço.
olha so, com esse codigo voce consegue criar um pdf do seu relatorio via java, mas nao sei como fazer pra abrir o pdf depois de criado, se voce conseguir, por favor me avise, ok !!!
ResultSet results ;
JRResultSetDataSource dataSource = new JRResultSetDataSource( results );
HashMap parameters = new HashMap();
String caminho = "relatorio/" ;
JasperRunManager.runReportToPdfFile(caminho+"relatorio.jasper" , parameters, dataSource);
JasperFillManager.fillReportToFile( caminho+"relatorio.jasper" , parameters, dataSource );
JasperExportManager.exportReportToPdfFile( caminho+"relatorio.jrprint" );
JasperViewer.viewReport( caminho+"relatorio.pdf", false ); // nao funciona