Você está na página 1de 8

11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani

http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 1/8
Inicio
Arquivos
Artigos
Roberto Furutani
Praa do Pr do sol - SP
Relatrio Dinmico com JasperDesign
08/junho/2010 - Java
Ol
Que tal fazer um relatrio sem iReport? e sem ter de fazer o JRXML? e ser montada de dinamicamente?
Pois isso possvel usando algumas classes do JasperReports como a JasperDesign, JRDesignBand, JRDesignStaticText, JRDesignField e
JRDesignExpression. No muito complicado fazer isso no como voc podem ver no exemplo que fiz, o mais dficil mesmo posicionar os
elementos na pgina. Precisa usar muito a imaginao.
Basicamente feito tudo pela classe abaixo.
package br.com.furutani.reldin;
import java.awt.Color;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignStaticText;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.type.HorizontalAlignEnum;
public class ReportDesigner {
public JasperDesign getDesign() throws JRException {
// Cria um novo relatrio
JasperDesign jasperDesign = new JasperDesign();
// PAGE
configPage(jasperDesign);
// FIELD
JRDesignField field = null;
addField("referencia", String.class, jasperDesign);
addField("consumo", Integer.class, jasperDesign);
// TITLE
JRDesignBand jrDesignband = null;
JRDesignStaticText staticText = null;
configTitle(jasperDesign);
// PAGE HEADER
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(15);
jasperDesign.setPageHeader(jrDesignband);
// COLUMN HEADER
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(25);
jasperDesign.setColumnHeader(jrDesignband);
//Dados da referencia
staticText = new JRDesignStaticText();
staticText.setX(0);
staticText.setY(5);
staticText.setWidth(150);
staticText.setHeight(15);
staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
staticText.setText("Referncia - Ms/Ano");
staticText.setBold(true);
jrDesignband.addElement(staticText);
//Dados do consumo
staticText = new JRDesignStaticText();
staticText.setX(150);
staticText.setY(5);
staticText.setWidth(100);
staticText.setHeight(15);
11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani
http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 2/8
staticText.setHorizontalAlignment(HorizontalAlignEnum.RIGHT);
staticText.setText("Consumo - kWh");
staticText.setBold(true);
jrDesignband.addElement(staticText);
// DETAIL
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(20);
//Dados da referencia
JRDesignTextField textField = new JRDesignTextField();
textField.setBlankWhenNull(false);
textField.setX(0);
textField.setY(5);
textField.setWidth(150);
textField.setHeight(15);
// Adiciona a expressao no campo
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText("$F{referencia}");
textField.setExpression(expression);
jrDesignband.addElement(textField);
//Dados do consumo
textField = new JRDesignTextField();
textField.setBlankWhenNull(false);
textField.setX(200);
textField.setY(5);
textField.setWidth(50);
textField.setHeight(15);
textField.setHorizontalAlignment(HorizontalAlignEnum.RIGHT);
//Adiciona a expressao no campo
expression = new JRDesignExpression();
expression.setValueClass(java.lang.Integer.class);
expression.setText("$F{consumo}");
textField.setExpression(expression);
jrDesignband.addElement(textField);
jasperDesign.setDetail(jrDesignband);
// COLUMN FOOTER (Escondido)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(0);
jasperDesign.setColumnFooter(jrDesignband);
// PAGE FOOTER (Escondido)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(0);
jasperDesign.setPageFooter(jrDesignband);
// NO DATA (No JasperViewer no mostra, na web mostraria)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(20);
staticText = new JRDesignStaticText();
staticText.setX(10);
staticText.setY(5);
staticText.setWidth(64);
staticText.setHeight(15);
staticText.setText("Sem registros para compor o relatrio!");
staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
jrDesignband.addElement(staticText);
jasperDesign.setNoData(jrDesignband);
// SUMMARY (Escondido)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(0);
jasperDesign.setSummary(jrDesignband);
return jasperDesign;
}
/**
* Ajusta os parametros do titulo
* @param jasperDesign
*/
private void configTitle(JasperDesign jasperDesign) {
JRDesignBand band = new JRDesignBand();
band.setHeight(50);
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setX(10);
staticText.setY(10);
staticText.setWidth(450);
staticText.setHeight(40);
staticText.setFontName("Tahoma");
staticText.setForecolor(Color.BLUE);
staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
staticText.setFontSize(24);
staticText.setPdfFontName("Helvetica-Bold");
staticText.setBold(true);
staticText.setText("Histrico de Consumo");
band.addElement(staticText);
jasperDesign.setTitle(band);
}
/**
* Adiciona campos ao relatorio
11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani
http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 3/8
* @param name
* @param clazz
* @param jasperDesign
* @throws JRException
*/
private void addField(String name, Class clazz, JasperDesign jasperDesign)
throws JRException
{
JRDesignField field = new JRDesignField();
field.setName(name);
field.setValueClass(clazz);
jasperDesign.addField(field);
}
/**
* Configura a pagina
* @param jasperDesign
*/
private void configPage(JasperDesign jasperDesign) {
jasperDesign.setPageWidth(500);
jasperDesign.setPageHeight(1000);
jasperDesign.setColumnCount(1);
jasperDesign.setColumnWidth(450);
jasperDesign.setColumnSpacing(0);
jasperDesign.setLeftMargin(10);
jasperDesign.setRightMargin(10);
jasperDesign.setBottomMargin(5);
jasperDesign.setTopMargin(5);
jasperDesign.setName("RelatorioDeConsumo");
}
}
O exemplo foi feito no Eclipse Galileo. No foi usado nada de web apesar de ser facilmente adaptado para rodar em ambiente web.
Adicione as bibliotecas no classpath do projeto que esto dentro de <DIR_INSTALL>\iReport-3.7.2\ireport\modules\ext para compilar os fontes:
ant-1.7.1.jar
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
barbecue-1.5-beta1.jar
barcode4j-2.0.jar
batik-anim.jar
batik-awt-util.jar
batik-bridge.jar
batik-css.jar
batik-dom.jar
batik-ext.jar
batik-gvt.jar
batik-parser.jar
batik-script.jar
batik-svg-dom.jar
batik-svggen.jar
batik-util.jar
batik-xml.jar
bcel-5.2.jar
bsh-2.0b4.jar
castor-1.2.jar
cglib-2.1.jar
cincom-jr-xmla.jar
commons-beanutils-1.8.2.jar
commons-collections-3.2.1.jar
commons-dbcp-1.2.2.jar
commons-digester-1.7.jar
commons-javaflow-20060411.jar
commons-logging-1.1.jar
commons-math-1.0.jar
commons-pool-1.3.jar
commons-vfs-1.0.jar
dom4j-1.6.jar
ehcache-1.1.jar
eigenbase-properties-1.1.0.10924.jar
eigenbase-resgen-1.3.0.11873.jar
eigenbase-xom-1.3.0.11999.jar
ejb3-persistence.jar
11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani
http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 4/8
groovy-all-1.5.5.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate3.jar
hsqldb-1.8.0-10.jar
iText-2.1.7.jar
iTextAsian.jar
jakarta-bcel-20050813.jar
jasperreports-3.7.2.jar
jasperreports-chart-themes-3.6.2.jar
jasperreports-extensions-3.5.3.jar
jasperreports-fonts-3.7.2.jar
javacup.jar
javassist-3.4.GA.jar
jaxen-1.1.1.jar
jcommon-1.0.15.jar
jdt-compiler-3.1.1.jar
jfreechart-1.0.12.jar
jpa.jar
js_activation-1.1.jar
js_axis-1.4patched.jar
js_commons-codec-1.3.jar
js_commons-discovery-0.2.jar
js_commons-httpclient-3.1.jar
js_jasperserver-common-ws-3.5.0.jar
js_jaxrpc.jar
js_mail-1.4.jar
js_saaj-api-1.3.jar
js_wsdl4j-1.5.1.jar
jta.jar
jxl-2.6.jar
log4j-1.2.15.jar
mondrian-3.1.1.12687-Jaspersoft.jar
olap4j-0.9.7.145.jar
png-encoder-1.5.jar
poi-3.5-FINAL-20090928.jar
rex-20080421.jar
rhino-1.7R1.jar
saaj-api-1.3.jar
slf4j-api.jar
slf4j-log4j12.jar
spring.jar
sqleonardo-2007.03.jar
swingx-2007_10_07.jar
xml-apis-ext.jar
xml-apis.jar
O projeto do Eclipse com os fontes est disponvel no link abaixo:
JasperDinamico
O resultado ser esse:
At mais,
11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani
http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 5/8
Roberto
Leia tambm:
Upload de mltiplos arquivos com HTML5 e Java Servlet
Liberar espao usado pelo instagram no iPhone
Carto de memria Wireless Eye-Fi
Como ir a Colonia Del Sacramento
Ler ref cursor em PL/SQL
ireport, jasperreports
Roberto Furutani Comentrios RSS
0
Tutoriais sobre Servios Web e WS-BPEL
Alterar senha do usurio sys do Oracle XE
11 comentrios
1. #
George
junho 16th, 2010 at 15:50
Ol, Roberto. Gostaria de saber qual fonte/manual voc usou como auxlio para essa implementao. Talvez eu tambm precise implementar
relatrios dinmicos sem uso de JRXML, mas ainda no achei tutorais a respeito, e se basear s nas docs da api tarefa quase impossvel.
Grato pelo post.
Responda a esse comentrio
#
Roberto Furutani
junho 16th, 2010 at 16:47
Ol
Eu pesquisei em fruns lista de discusses e fui juntando algumas dicas que ia encontrando para montar o post.
Fazer isso olhando a API no to impossvel assim, mas concordo que dificil pois o javadoc deles no ajuda muito.
D uma boa analizada no pacote net.sf.jasperreports.engine.design.
Responda a esse comentrio
2. #
Felipe
setembro 24th, 2010 at 12:06
Mas se temos o IReports, por que no utiliz-lo? No consegui achar uma resposta pra essa pergunta.
De qualquer forma, parabns pela fora de vontade. rsrs
Responda a esse comentrio
#
11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani
http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 6/8
Roberto Furutani
setembro 24th, 2010 at 18:38
Pode ser difcil usar essa forma de gerar relatrio, mas de repente se voc precisar incluir ou tirar uma coluna ou um campo dinamicamente
temos uma opo ai.
Responda a esse comentrio
3. #
Erick
novembro 18th, 2010 at 15:48
Roberto fiz uma aqui mais no esta funcionando veja o link :
http://www.guj.com.br/posts/list/224980.java
vc poderia me ajudar?
pode mandar email para erickfm8@hotmail.com
Deste ja agradeo
Responda a esse comentrio
4. #
Deann Reese
dezembro 24th, 2010 at 6:35
Roberto fiz uma aqui mais no esta funcionando veja o link : http://www.guj.com.br/posts/list/224980.java vc poderia me ajudar? pode mandar
email para erickfm8@hotmail.com Deste ja agradeo
Responda a esse comentrio
5. #
crm
setembro 13th, 2011 at 11:34
Roberto preciso fazer passando parmetros pro iReport, sabe como fazer?
Responda a esse comentrio
#
Roberto Furutani
setembro 13th, 2011 at 19:18
Tem um artigo aqui no site sobre parmetros no ireport.
Responda a esse comentrio
6. #
Raul Frederico Welter
outubro 25th, 2011 at 13:24
Ol Roberto, primeiramente parabns pelo tutorial.
Agora, eu tenho o seguinte problema, criei um relatrio no iReport, porm, queria compil-lo em outra mquina sem o arquivo .jrxml (cdigo
fonte) certo? H como fazer isso? Obrigado.
Responda a esse comentrio
7. #
james alberto
julho 5th, 2012 at 21:15
Ol estou seguindo o seu tuto, mas d erro na linha
jasperDesign.setDetail(jrDesignband); o java no estar encontrando o mtodo .setDetail, vc pode ajudar ?
Responda a esse comentrio
#
Jorge Palma
julho 23rd, 2012 at 14:56
11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani
http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 7/8
((JRDesignSection)jasperDesign.getDetailSection()).addBand(jrDesignband);
Responda a esse comentrio
Deixe um comentrio
Nome (obrigatrio)
E-Mail (no ser exibido) (obrigatrio)
Website
Enviar
Avise-me por email quando novos comentrios forem postados aqui.
Procurar
Pesquisar por: Pesquisar
500px

Sunset

Assuntos
Selecionar categoria
Tpicos recentes
Java8 6 linhas de cdigo que eu gostei
Mostrar a soma dos arquivos selecionados no finder Mac OSX
Exibir o tamanho dos diretrios no finder Mac OSX
Funo PLSQL para converter smbolos HTML (entities)
Como configurar o time capsule para funcionar com o Live TIM
Visualizaes
(44.752) - Usando o JRBeanCollectionDataSource
(43.436) - Simulador de Fila de Impresso
(43.067) - Onde dia 20/11 feriado?
(42.809) - Como zerar o iPhone ou iPad antes de vender
(20.433) - Clculo da diferena entre datas em Java
(12.334) - Tutorial de JasperReports usando ArrayList de VO
(11.344) - Exemplo de aplicao JPA (Hibernate)
(10.974) - Gerando Relatrios Com JasperReports e iReports no Netbeans
(10.729) - Aplicativo para publicar fotos no instagram
(10.244) - Gerando certificados com OpenSSL
Lista de Links
1up4Developers
ABAP 101
11/5/2014 Relatrio Dinmico com JasperDesign Roberto Furutani
http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/ 8/8
Andr L. S.
Aquele blog de SOA
Architecture Journal
Blog About ORACLE Luciano Alvarenga
Blog da Caelum
Blog do Claudio Miranda
Blog do Urubatan
Bruno Rossettos Blog
Development Blog
Diego Pires Plentz
Documentation
fiado s amanh
Fragmental Software e Batatas
Furious Bob
Gorda Safada
Guilherme Chapiewski
GUJ
JAVA NOROESTE
Marco Mendess Blog
Mobile Tutorial
Programando sem cafena
Rodrigo Panachi Weblog
SOA Magazine
SOA, Simples Assim!
Thunder-Boy
Tutorial de iReport
Tag cloud
cust om t ag nyc Jakart a POI pesquisa Boas Prt icas Faculdade Tomcat JBoss ESB gmail ADF 11G finder cewolf adobe flex 3 blog .net jsp Inst agram plsql OpenSSL Google jasperreports imagens
ajax jdeveloper spring jchart s t oplink JFreeChart mac scbcd SOA iphone Java jsf cert ificacao Oracle ant i-aliasing new york Apache JExcel ldap hibernat e ireport jpa Java7