Boa tarde,
Criei um sistema que gera pdf como array de bytes e preciso de alguma forma enviar esses arrays ao usuário quando determinada action for realizada, e após o envio renderizar o pdf numa jsp de exibição.
Alguém por favor poderia me ensinar como eu conseguiria fazer esse envio do array para o usuário final sem armazenar nenhuma informação e depois renderizar o pdf para exibição?
Obrigado.
Só mudando o content-type não adiantou?
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
Pode ser uma pergunta besta, mas sou novato… no caso teria uma servlet como essa que você especificou, acessando a classe geradora do array de bytes e gerando a exibição do pdf?
Como você está gerando o PDF? E o array de bytes?
Por que se eles forem gerados adequadamente, você consegue fazer o envio sem problemas, apenas mudando o content-type do retorno, para “application/pdf”.
O resto o teu navegador fará pra ti, pois ele irá entender que o que está sendo recebido não é um texto (html) e sim um arquivo a ser interpretado pela extensão/plugin do leitor de PDF (ou, caso não exista, ele irá realizar o download do arquivo).
[quote=drsmachado]Como você está gerando o PDF? E o array de bytes?
Por que se eles forem gerados adequadamente, você consegue fazer o envio sem problemas, apenas mudando o content-type do retorno, para “application/pdf”.
O resto o teu navegador fará pra ti, pois ele irá entender que o que está sendo recebido não é um texto (html) e sim um arquivo a ser interpretado pela extensão/plugin do leitor de PDF (ou, caso não exista, ele irá realizar o download do arquivo).[/quote]
O Bopepo possui um método chamado “getPdfAsByteArray” que me retorna esse valor.
[code]
public byte[] getPdfAsByteArray() {
if (log.isDebugEnabled()) {
log.debug("documento instance : " + pdfViewer);
}
return pdfViewer.getBytes();
}
//pdfViwer.getBytes()
protected byte[] getBytes() {
...
return doc.toBytes();
}
//doc.toBytes()
public byte[] toBytes() {
…
return outputStream.toByteArray();
}[/code]
Com esse tipo de retorno, consigo fazer conforme havia dito?
Perfeitamente.
Aí basta adaptar o seguinte trecho para o que você precisa
//response é o objeto de HttpServletResponse que você recebe no método da Servlet
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();