Ler arquivo DOC com formato e persistir em um campo BLOB

5 respostas
Z

Boa note pessoal!!
Gostaria de carregar para a memória um arquivo DOC com seus formatos (cor, fonte, tamanho…) e persisti-lo no postgres. Tentei utilizando a API POI e consegui apenas carregar os dados sem formatação. Ouvi algo a respeito disso com Stream em Java e para persistir o tipo de campo seria blob. Existe realmente alguma maneira de fazer isso?
Desde já agradeço.

5 Respostas

furutani

Pegar a formatação de um arquivo DOC é meio complicado. Você vai gravar em qual formato no banco de dados HTML, XML etc?

T

Esqueça que o formato é .DOC, .PNG, .JPG, .RAR, .ZIP ou .XXX. Se você quer guardar um arquivo sem alteração nenhuma, então considere que é um arquivo binário, use um BLOB mesmo, e use as InputStreams / OutputStreams como lhe aconselharam.

Z

Antes de tudo gostaria de agradecer a ajuda de vocês, thingol e furutani.

furutani, é meio complicado mesmo, mas é essa a minha necessidade. thingol, abaixo eu coloquei o meu código, eu consegui carregar os dados para memória usando isto InputStream inputStream = new FileInputStream( arquivo );, porém o arquivo veio sem formatação, 100% arial 10, sem cor, sem marcadores e etc.

Estou estudando um pouco mais a respeito desta API POI, mas ainda não consegui nada, se puderem me ajudar, abaixo está o meu código.


package br.com.exemplo.word;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.extractor.WordExtractor;

import org.apache.poi.hwpf.usermodel.Range;

import br.com.exemplo.main.Principal;

public class Word {

public StringBuilder getText() throws IOException {
	// crio o arquivo para poder captura-lo pelo input stream
	File arquivo = new File(Principal.PATH + Principal.ARQUIVO_DO_CONTRATO);  
	
	// capturo o arquivo e jogo ele dentro de um input stream para a biblioteca da API poder manipular
	InputStream inputStream = new FileInputStream( arquivo );
	
	// crio o objeto que manipulará o arquivo do word
	HWPFDocument document = new HWPFDocument(inputStream);
	
	// usando o wordExtractor 
	// objeto responsavel pela extração dos dados do arquivo word
	WordExtractor extractor = new WordExtractor(document);
	
	String conteudo = extractor.getText(); // com este método eu captura o texto do arquivo dentro de uma String
	StringBuilder stringBuilder = new StringBuilder(conteudo); // assim fica mais facil e mais rápida a leitura da string
	// basta agora apenas tratar a stringBuilder para fazer o replace
	
	Range range = document.getRange();		 
	
	return new StringBuilder( range.text() );
}

}

furutani

Devido a necessidade de manter a formatação, por que você não grava o arquivo doc no campo blob sem fazer essa extração de texto?

Z

Como faço isso? Pode me ajudar?
Não sei fazer… :frowning:

Vlw.

Criado 11 de julho de 2009
Ultima resposta 12 de jul. de 2009
Respostas 5
Participantes 3