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.
Ler arquivo DOC com formato e persistir em um campo BLOB
5 Respostas
Pegar a formatação de um arquivo DOC é meio complicado. Você vai gravar em qual formato no banco de dados HTML, XML etc?
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.
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() );
}
}
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?
Como faço isso? Pode me ajudar?
Não sei fazer… 
Vlw.