quinta-feira, 26 de maio de 2011

Criando Documento a partir de Templates com OpenOffice e Java

Deparei-me com o seguinte problema: como permitir ao usuário criar um template no OpenOffice Writer e utilizá-lo como modelo para criar relatórios na minha aplicação. Por exemplo: Minha aplicação gera uma fatura e precisa emitir um recibo. A empresa possui um recibo padrão, feito no OpenOffice. Como permitir que minha aplicação entenda esse documento como um modelo e possa utilizá-lo ao gerar o recibo?
Como para praticamente tudo em Java, existe um framework que faz exatamente esse trabalho, chama-se JODReports, open-source, que usa o Freemaker para fazer do documento do openoffice um template com tags especiais onde podemos adicionar informações via código.
Vamos começar com o Hello World. Abra o OpenOffice Writer e crie um documento com o texto:

Olá ${nome}!

E salve-o como helloworld.odt.
Agora vamos configurar o JODReports no Eclipse:

1) Crie um projeto Java de nome JODHello;
2) Copie o arquivo helloworld.odt para este diretório no seu workspace;
3) Crie uma pasta chamada lib;
4) A versão 2.4.0 do JOD Reports necessita dos seguintes jars:
net.sf.jodreports:jodreports:jar:2.4.0
  • org.slf4j:slf4j-api:jar:1.6.1 (compile) 
  • commons-io:commons-io:jar:1.4 (compile) 
  • org.freemarker:freemarker:jar:2.3.16 (compile) 
  • xom:xom:jar:1.2.5 (compile) 
  • junit:junit:jar:3.8.2 (test) 
  • org.slf4j:slf4j-jdk14:jar:1.6.1 (test) 
    • org.slf4j:slf4j-api:jar:1.6.1 (test)

Retirados do site deles (http://jodreports.sourceforge.net/docs/dependencies.html)
No link para downloads (https://sourceforge.net/projects/jodreports/files/JODReports 2.4/2.4.0/) tem todos os jars necessários. O jodreports-cli.zip possui um jar chamado jodreports-cli-2.4.0-jar-with-dependencies.jar que, como o nome diz, possui todas as dependencias dentro, não necessitando das outras bibliotecas. Podemos usar este. Coloque o build path no seu eclipse.
5) Crie uma classe: HelloJod.java
public class HelloJod {

 public static void main(String[] args) throws Exception {
  DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory();
  DocumentTemplate template = documentTemplateFactory.getTemplate(new File("helloworld.odt"));
  Map model = new HashMap();  
  model.put("nome", "Mundo");
  template.createDocument(model, new FileOutputStream("hello-gerado.odt"));
 }

}

Agora é só rodar e pronto! Você gerou um documento novo chamado hello-gerado.odt com o texto "Olá Mundo!" dentro.

Ainda estou fazendo testes com o framework, logo colocarei mais posts.

Para saber mais: JODReports Guide

O projeto tem pouca documentação, e por isso está um pouco difícil fazer alguns exemplos funcionarem. Mas na medida que for descobrindo posto aqui!

Abraços!

1 comentários:

Diego Bian disse...

seguindo sua pagina.... follow back?

http://movimentodotogather.blogspot.com/

tank you!