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�������?���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?
Tentei fazer conforme dito mas não funcionou! Alguma outra idéia?
será que não esta havendo algum erro na hora de chamar esse cara : fileToByte(f); ???
monike
#6
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
Consegui resolver. O problema é que os arquivos estavam fora do container.