Ajuda com Jakarta POI - Manupilar .doc e .docx

2 respostas
R

Bom dia.
Estou trabalhando com POI para manipulação de documentos do word.

O documento tem várias TAGS (ex. #P1#, #P2#, #P3#, etc.) e cada tag representa um parágrafo que pode ou não fazer parte do documento final, de acordo com o que o usuário irá selecionar em uma tela.

Explicando melhor…
O usuário irá escolher em uma tela diversos “Temas” para criação automática do documento. De acordo com os temas que ele escolher na tela, o programa irá substituir as tags por um texto já pré definido.

O que ocorre:
Um parágrafo pode OU NÃO fazer parte do documento. Por exemplo, se o usuário NÃO SELECIONA o tema na tela que corresponde ao #P1#, o programa substitui o #P1# por espaços.
Mas o resultado final acaba sendo um documento cheio de buracos, já que toda vez que um tema não é selecionado, a tag é substituída por espaços em branco.

A DÚVIDA:
Utilizando POI, tem como eu EXCLUIR LINHAS DO DOCUMENTO? Dessa forma, em vez de eu substituir as tags por linhas em branco, eu poderia apenas excluir a linha onde a tag que não será utilizada está, assim, eu conseguiria eliminar os buracos do documento.
Dei uma procurada já, mas não consegui encontrar nada sobre isso.

Agradeço desde já pela ajuda!

2 Respostas

R

Consegui corrigir o problema da seguinte forma:

Fiz a substituição da tag com \r.

Exemplo:
mapa.put("#P1#\r\r", “”);
e fiz o replace.

Dessa forma, a tag é substituída junto com duas quebras de linha após ela.
E o documento fica sem os buracos.

M

Boa tarde pessoal,

Eu to tentando inserir uma tabela no final do documento word, mas eu só consegui inserir uma linha com o meu e-mail com o seguinte comado "ange.insertAfter(\nPaulo Fernandes: [email removido]); ". Alguém poderia me ajudar a inserir uma tabela de uma linha e três colunas?

segue e minha classe:

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;

public class InsertText {

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();

	//range.insertBefore("Paulo Fernandes: [email removido]\n");
	range.insertAfter("\nPaulo Fernandes: [email removido]");

            /*
             PRECISO INSERIR UMA TABELA DE UMA LINHA E TRÊS COLUNAS
            */
	
	range.replaceText(Principal.VAR_NOME_EMPRESA, Principal.VALOR_MULTA); 
	range.replaceText(Principal.VAR_VALOR_CONTRATO, Principal.VALOR_MULTA); 
	range.replaceText(Principal.VAR_VALOR_MULTA, Principal.VALOR_MULTA); 
	
	return new StringBuilder( range.text() );
}

}

Criado 13 de junho de 2012
Ultima resposta 25 de set. de 2012
Respostas 2
Participantes 2