Jsf + pdf

Amigos,

estou tentando mostrar um documento pdf no browser com o seguinte código:


byte[] arquivo = null;
		 ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
		 HttpServletResponse response = (HttpServletResponse) context.getResponse();
		 try {
			 File f = new File("c:\\temp\\anexo.pdf");
			
			 arquivo = fileToByte(f);
			 response.setContentType("application/pdf");   
			 response.setHeader("Content-disposition", "inline;filename=c:\\temp\\arquivo.pdf");   

		        response.setContentLength(arquivo.length);   
		        ServletOutputStream ouputStream = response.getOutputStream();   
		        ouputStream.write(arquivo);   
		        ouputStream.flush();   
		        ouputStream.close();
		        
		        FacesContext.getCurrentInstance().responseComplete();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("Erro ao abrir arquivo: " + e.getMessage());
			  
		}

Só que em vez de mostrar o arquivo, é mostrado a seguinte string no browser:

%PDF-1.4 %äüöß 2 0 obj <> stream x��K���ׯ���������r�dvѳ������������?o�뎎^ =�?w���{낃S����N���7 dű��O�����b�ob��=�_0 �y�N)�*��6�������?&#65533;��j���}>��A���y��j]S�v� �#��ʾOT�g� Fj�� nw�ݟ��K V�f%c7ӠqF�:y�� ���I�06�?�(�e�ؒ�ee V�I���є%1��M���’� ���z|����7?� {:1���p����풊��m��`h��C���-�4�jSw��������9������N��BW�1r���]O��������=�# <����Kϣ/M�N�H�����s[D���Oi

Alguém tem idéia do que pode ser isso?

http://www.guj.com.br/posts/list/197089.java#989256

Tentei fazer conforme dito mas não funcionou! Alguma outra idéia?

Alguem???

será que não esta havendo algum erro na hora de chamar esse cara : fileToByte(f); ???

Eu fiz assim no meu cara…

[code]Requisicao req = new Requisicao();
List valoresDoRelatorio = req.gerarValoresDoRelatorioPara(filtroPlaca, ano, mes);

			if (valoresDoRelatorio.size()>0) {
			
			String pathJasper = context.getRealPath("WEB-INF/report/")+ "/";
			
			HashMap<String, Image> parameters = new HashMap<String, Image>();			
			Image logo = new ImageIcon(getClass().getResource("/br/gov/inpi/srv/relatorio/logo.gif")).getImage();
			parameters.put("logo", logo);
			
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(valoresDoRelatorio);

			JasperPrint impressao = JasperFillManager.fillReport(pathJasper+ "/report1.jasper", parameters, ds);
			
			byte[] arquivo = JasperExportManager.exportReportToPdf(impressao);

			String nomeDoArquivo = "relatorio_mes.pdf";
			response.setContentType("application/pdf");
			response.setHeader("Content-Disposition","attachment; filename=".concat(nomeDoArquivo));
			response.setContentLength(arquivo.length);
			ServletOutputStream sos = response.getOutputStream();
			sos.write(arquivo, 0, arquivo.length);
			sos.flush();
			sos.close();
			return "ok";[/code]

Esse é o meu código para converter um arquivo em um array de bytes:

public static byte[] fileToByte(File arquivo) throws Exception {  
		  byte[] Conteudo = null;  
		              int tamanhoArquivo = (int) arquivo.length();  
		              FileInputStream encheArquivo = null;  
		    
		              try {  
		                  encheArquivo = new FileInputStream(arquivo);  
		    
		                  BufferedInputStream bufferDeEntrada = new BufferedInputStream(encheArquivo);  
		                  Conteudo = new byte[tamanhoArquivo];  
		                  bufferDeEntrada.read(Conteudo, 0, tamanhoArquivo);  
		                  bufferDeEntrada.close();  
		              } finally {  
		                  if (encheArquivo != null) {  
		                      encheArquivo.close();  
		                  }  
		              }  
		    
		              return Conteudo;    
	}

Já tentei de várias formas e pesquisei em diversos tópicos mas não funciona de jeito nenhum :frowning:

Consegui resolver. O problema é que os arquivos estavam fora do container. :smiley: