[RESOLVIDO] Gerar RTF e Abrir no Navegador

Senhores boa tarde.

Tenho tentado mas não consegui implementar a funcionalidade citada.

Eu criei um temple, consegui edit-alo e salva-lo.

Porem eu queria abrir o mesmo no navegador ou uma opção para baixar mas não estou conseguindo.

OBS: Não preciso nem salvar o arquivo na pc. Só precisaria que ele abrisse.

String id = request.getParameter("id");
			
			Teste teste  = new Teste ();
			Teste DAO testedao = new TesteDAO();
			
			teste= testedao.getById(Integer.parseInt(id));
			
			String path = getServletContext().getRealPath("/tau/")
					+ "/";
			
			String rtfSource = "";
			
			if(x) {
				rtfSource = path + "a.rtf";
			}else ify) {
				rtfSource = path + "b.rtf";
			}else if(g) {
				rtfSource = path + "c.rtf";
			}else if(h) {
				rtfSource = path + "d.rtf";
			}else ifu) {
				rtfSource = path + "e.rtf";
			}else  if(w) {
				 rtfSource = path + "f.rtf";
			}
			
			RTFTemplateBuilder rtb = RTFTemplateBuilder.newRTFTemplateBuilder();
			
			RTFTemplate rt = rtb.newRTFTemplate();
			
			rt.setTemplate(new File(rtfSource));
			
			
			rt.put("nome", teste.getNome());
			
			
			rt.merge("/opt/tau/"+designacao.getPermissionario()+".rtf").getReader();

Salvo com sucesso. Como fazer para abrir no navegador?

Obrigado.

Carinha, o segredo de fazer o arquivo ser aberto no navegador é determinar o “contentType” no cabeçalho do response

response.setContentType(“application/rtf”);

Obrigado pelo retorno.

response.setContentType("application/rtf");    
     response.setHeader("Content-disposition", "note;filename=\""    
             + fileName + "\"");    
     response.addHeader("Content-description", fileName);  

Inseri isso no código. Creio que falta inserir o arquivo propriamente dito.

Como seria?

Não sei se você está fazendo isto como servlet ou como JSP, mas você pode abrir o arquivo e reescrever o arquivo direto na saída do response. Algo como:

OutputStream out = response.getOutputStream();
FileInputStream fi = new FileInputStream(<<seu arquivo>>);
byte[] buffer = new byte[30000]; //um bufferzinho pra ler mais que um byte por vez.
int lidos;
do {
   lidos = fi.read(buffer);
   if(lidos != -1) {
       out.write(buffer,0,lidos);
       out.flush();
   }
while(lidos != -1);

Nota, fiz esse código de cabeça, e não testei “de verdade” ele.
Uma coisa legal de se fazer antes de enviar o arquivo é falar o tamanho dele no cabeçalho.
response.setContentLength(<>) antes de começar o envio dos dados que assim o cliente sabe quando o arquivo termina e consegue falar os “% concluídos” do arquivo.

Muito obrigado pela ajuda.

Está gerando tudo certinho. Agora sobre a acentuação do RTF. Todas as palavras acentuadas estão saindo com caracteres especiais.

O que seto para ler UTF-8 ?

[quote=edysnipes]Muito obrigado pela ajuda.

Está gerando tudo certinho. Agora sobre a acentuação do RTF. Todas as palavras acentuadas estão saindo com caracteres especiais.

O que seto para ler UTF-8 ?[/quote]
Bom, carinha, aí não sei o que você está fazendo aí, né? Se você está “recheando” um arquivo RTF pronto, você precisa ver qual character set que o RTF aceita, e não o contrário… Talvez valha a pena converter seu texto para outro encoding. Como faz isso não lembro de cabeça. Veja a especificação do formato Rich Text Format que talvez você tenha alguma dica por lá.

Muito obrigado CARINHA!

Resolvido. Hoje a noite irei postar a solução para ajudar outros CARINHAS.

Valew.