Manipulação de documentos do Word

Olá pessoal,

Tenho um cliente que tem como uma das necessidades exportar um .doc, a partir de conjunto de dados obtidos de um sistema web já existente.

Ele quer poder editar esse documento como quiser. É algo como um template de contrato ou ata (relativamente simples, é texto puro, com no máximo um cabeçalho e paginação, sem imagens) que pode ser modificado de diversas maneiras não previsíveis.

Pesquisei sobre o assunto e muitos indicam o Apache POI, mas li (não sei se procede) que o suporte à manipulação de .doc é restrita e essa parte do projeto anda meio parada…

Também indicaram RTF + iText, não sei se dá para fazer o que descrevi acima com o iText, no caso do cabeçalho.

Quem já teve experiência com manipulação de documentos do Office via Java, poderiam dar algumas dicas?

Obrigado desde já.

Cara acredito que o POI seja a o caminho à seguir.

Abraço.

Bom dia,

O meu CTO, tinha necessidade de criar e manipular um documento Word (DOC) com Java.
Ele me falou de RTFTemplate , Apache POI.

Uma vez que estas APIs não eram fáceis de usar, e minha empresa prefere soluções abertas.

Finalmente, a mudança de estratégia, optamos por um formato aberto Open Document Format (ODF) OpenOffice.org
Devido a este formato é aberto e porque existem boas APIs Java para lidar com ele.
OpenOffice.org 3.1.1 Software Development Kit (SDK), JODReports, JODConverter, ODF Tools, ODFDOM …

(format ODT OpenOffice.org)

JODConverter automates conversions between office document formats using OpenOffice.org. Supported formats include OpenDocument, PDF, RTF, Word, Excel, PowerPoint, and Flash. It can be used as a Java library, a command line tool, or a Web application.

http://odftoolkit.org/projects
http://www.kaaredyret.dk/openoffice_links.html


http://jodreports.sourceforge.net/

Abraços

[quote=JxtaNode]Bom dia,

O meu CTO, tinha necessidade de criar e manipular um documento Word (DOC) com Java.
Ele me falou de RTFTemplate , Apache POI.

Uma vez que estas APIs não eram fáceis de usar, e minha empresa prefere soluções abertas.

Finalmente, a mudança de estratégia, optamos por um formato aberto Open Document Format (ODF) OpenOffice.org
Devido a este formato é aberto e porque existem boas APIs Java para lidar com ele.
OpenOffice.org 3.1.1 Software Development Kit (SDK), JODReports, JODConverter, ODF Tools, ODFDOM …

(format ODT OpenOffice.org)

JODConverter automates conversions between office document formats using OpenOffice.org. Supported formats include OpenDocument, PDF, RTF, Word, Excel, PowerPoint, and Flash. It can be used as a Java library, a command line tool, or a Web application.

http://odftoolkit.org/projects
http://www.kaaredyret.dk/openoffice_links.html


http://jodreports.sourceforge.net/

Abraços[/quote]

Estou com um problema parecido…

Preciso editar um documento já existente (incluir, excluir e editar dados). Dentre estas bibliotecas que você citou, qual é a melhor para fazer isto em Java?

Obrigado

Bom dia,

OASIS OpenDocument Format (ODF) esta mais ligado naturalemente com JAVA que MS-Office :
Por razões históricas OpenOffice e StarOffice estão ligados a SUN.
http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office

Para editar um documento já existente (incluir, excluir e editar dados) :

Uma solução é utilizar um Documento ODT Template no qual meter variáveis ${var1}
elas são automaticamente substituídas por a valor da variávei chamada var1.
Os dados podem vir duma DBMS ou da Web ou de não sei de onde :slight_smile:

Prepara uma “Template” en entrada “INPUT Template” et o programma transforma a Template e fabrica
um autro documento “Output” com os dados que você quizer.

Composing Templates :
http://jodreports.sourceforge.net/?q=node/23

Exemplo de codigo para fabricar um doc a partir d’um Doc Template em input et dos dados que vem da DBMS com DataAccessManager :
Se você quizer tanho o projeto ECLIPSE .

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;

import net.sf.jooreports.templates.DocumentTemplate;
import net.sf.jooreports.templates.DocumentTemplateException;
import net.sf.jooreports.templates.DocumentTemplateFactory;


public class GeneratorODF {
	
	
	public static  void genererFactureFormatODT(String idFacture, DataAccessManager dataAccessManager)
	{
		DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory();
		DocumentTemplate template=null;
		try {
			template = documentTemplateFactory.getTemplate(new File("input_template_fatura.odt"));
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		Map<String,String> data = dataAccessManager.getDataFactureClient(idFacture);
		
		try {
			
			template.createDocument(data, new FileOutputStream("factures/"+idFacture+"-output_fatura.odt"));
			
			System.out.println("Transformation au format ODT termine ! ");
			
			
		} catch (FileNotFoundException e) {
			System.out.println("FileNotFoundException : ");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("IOException : ");
			e.printStackTrace();
		} catch (DocumentTemplateException e) {
			System.out.println("DocumentTemplateException : ");
			e.printStackTrace();
		}
	}
}

Tambem pode fabricar um documento OpenOffice completo.
Utilizando o SDK de OpenOffice.
Para fazer isso tem algums exemplos no magazine françês chamado Progrmmez :
Geração de documentos OpenOffice.org com Java

Click sobre : Télécharger la source é um projeto ECLIPSE
http://www.programmez.com/magazine_articles.php?titre=Generation-de-documents-OpenOfficeOrg-en-Java&id_article=1294&magazine=124

O projeto OpenOffice.org tem sido inicialmente com base em fontes fornecidas pela Sun Microsystems, preparado para uma futura versão do StarOffice. Essas fontes são escritas em C + + e oferecem diversas possibilidades de linguagem, e funcionalidades de script e APIs para Java e outras linguagens de programação.
Fonte em françês : http://fr.openoffice.org/about-main.html

Abraços

Boa noite, JxtaNode.

Tentei utilizar o exemplo que você postou e na linha 17 ‘DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory();’ não é possível instanciar a classe DocumenttemplateFactory, ‘NoClassDefFoundError’, acredito ser a versão da biblioteca ‘jodreports’ estou utilizando a versão 2.4, qual versão vc utilou?

[quote=prpacheco]Boa noite, JxtaNode.

Tentei utilizar o exemplo que você postou e na linha 17 ‘DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory();’ não é possível instanciar a classe DocumenttemplateFactory, ‘NoClassDefFoundError’, acredito ser a versão da biblioteca ‘jodreports’ estou utilizando a versão 2.4, qual versão vc utilou[url]?[/quote]

Meu problema resolvi.

Mas gostaria de agradecer o post, pois foi através dele que conheci o JDOReport, e resolveu o meu problema que eu estava tendo com o WORD, alias tchau para o WORD.
O documento que o meu cliente tem salvo em WORD é de 300k, abrindo com o openOffice e salvando em .odt, já baixou para 44k e sem perder a formatação, utilizei um exemplo básico em http://pedrocavalero.blogspot.com/2011/05/criando-documento-partir-de-templates.html

Aconselho a todos que pretendem gerar um documento novo a partir de um template, que utilizem essa ferramenta, eu estava tendo tantos problemas com layout do arquivo WORD que quase fiz todo o documento em HTML.