Jsf + pdf

7 respostas
A

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?

7 Respostas

furutani

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

A

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

A

Alguem???

Giulliano

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

monike

Eu fiz assim no meu cara..

Requisicao req = new Requisicao();
			List<ValoresDoRelatorio> 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";
A

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:

A

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

Criado 6 de fevereiro de 2010
Ultima resposta 13 de fev. de 2010
Respostas 7
Participantes 4