Alterar arquivos existentes

8 respostas
K

Senhores,

Boa tarde.

Estou muito feliz aqui no forúm, pois existem muito conteúdo bom de verdade aqui e cada vez que navego pelos tópicos aprendo mais.

Mas não consigo resolver um problema, no app que estou desenvolvendo, preciso abrir um arquivo em formato .doc ou .odt e alterar algumas informações passadas pelo usuario.

para ficar fácil a compreensão, no arquivo, existe alguns campus chaves, tipo: “nomedocliente”, tudo junto mesmo, quando o usuario digitar o nome do cliente na JTextField e clicar em “gerar”, o documento será aberto e os campus com o “nomedocliente”, serão alterados para o nome que o usuario colocou.

Estou tentando fazer isso usando FileReader, tentei com InputStream, mas não deu certo, como eu poderia resolver esse problema? eu preciso gerar um novo documento com as informações substituidas? ou consigo substituir no proprio documento?

fico grato pela atenção.

8 Respostas

B

Onde num doc ou odt ficam guardados esses campos chaves? Metadados ou no texto do documento mesmo?

E

Mais um cara querendo usar um recurso chamado “Mail Merge” no braço …

http://office.microsoft.com/en-us/word-help/word-mail-merge-a-walk-through-the-process-HA001034920.aspx

O artigo da Microsoft é para o Office 2002 mas você pode usar algo parecido na sua versão do Office.

Você pode automatizar isso usando, por exemplo, VBA:

http://support.microsoft.com/kb/220607
http://msdn.microsoft.com/en-us/library/office/aa140197(v=office.10).aspx

etc.

K

Todo o documento e é texto…

K

então entanglement, estou usando a seguinte sintaxe para gerar um novo documento

File arquivo = new File(("nome do arquivo"+"extensão");
			if(!arquivo.exists()){
				System.out.println("Arquivo não existe");
			}else{
				try {
					FileInputStream f = new FileInputStream(arquivo);
					//aqui estou gerando um novo documento, copiando o arquivo de F
FileOutputStream  fw = new FileOutputStream("caminho de saida"+".extensão do documento");
					FileChannel fcOrigem = f.getChannel();    
				      FileChannel fcDestino = fw.getChannel();
				      fcOrigem.transferTo(0, fcOrigem.size(), fcDestino);    
				      f.close();    
				      fw.close();
Giulliano

Se não estiver enganado…vc não pode manipular um arquivo .doc como se ele fosse um .txt

É preciso usar uma lib, a mais famosa é: http://poi.apache.org/hwpf/index.html

K

Os comandos que eu usei, copiam um documento perfeitamente, criando um novo. A única coisa que não consigo fazer é alterar as informações dentro desse novo documento.

:frowning:

B

A cópia eu recomendaria fazer com o FileUtils.copy do Commons IO ou o o mesmo do NIO2 no Java 7. Pelo menos você não precisaria implementar nada.

Sobre alterar o arquivo, eu já antecipo que vai ser um processo extremamente complicado, principalmente pra quem não tem nem idéia de como um .doc e .odt funcionam. Siga a dica do pessoal acima, leia este artigo, e decida entre desistir da idéia, ou continuar usando o próprio ferramental e APIs Microsoft Office e do Open/LibreOffice para editar os documentos, que dificilmente será na linguagem Java.

K

Hum, acho que achei a solução para o problema, JODReports, estou vendo que dá para criar templates e usa-los para criar documento no OpenOffice, é o que eu preciso no momento,

Mas a API Apachei POI também é muito útil, mas acho que é mais complicada. kkk

obrigado pela atenção, se houver alguma dúvida, volto a perguntar.

Criado 20 de fevereiro de 2013
Ultima resposta 20 de fev. de 2013
Respostas 8
Participantes 4