Como enviar array de bytes e transformar para pdf na view?

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();