Abrir o Acrobat Reader no browser

4 respostas
A

Senhores,

Sou um programador iniciante no JAVA, geralmente tiro minhas dúvidas no Java Básico, mas essa “eu acho” que é um pouco mais complexa.

Estou gerando um relatório em PDF usando o iText. Neste meu servlet estou gravando um arquivo, mas não é isso que eu preciso. Eu não quero gravar o arquivo, na verdade eu pretendo abrir o Acrobat Reader no browser, com o relatório gerado, e permitir que o visitante do meu site decida se deseja grava-lo ou imprimi-lo diretamente do seu micro.

Alguém pode me enviar um exemplo de como eu consigo fazer isso.

Estou pedindo um exemplo, porque como disse anteriormente, sou iniciante :oops: e um exemplo sempre me ajuda muito. Caso não seja possível enviar o exemplo, uma dica já ajuda muito.

Abraços,

Augusto

4 Respostas

Rafael_Steil

Oi,

nao precisa ter criado um outro topico… as vezes demora, mas o pessoal geralmente responde… O mesmo topico em varios lugares dificulta a manutencao do forum…

Bom, em relacao a tua pergunta, eh mais ou menos assim:

Para setar o content-type, vc usa o metodo setContentType() da classe HttpServletResponse… por exemplo

response.setContentType("application/pdf");

Geralmente eh usado um PrintWriter para mandar caracteres para o browser… No teu caso, como eh binario, voce tem que usar um lance um pouco diferente… Eis um exemplo:

response.setContentType("application/pdf");

FileInputStream fi = new FileInputStream("d:/seila.pdf");

byte[] b = new byte[2048];
int c = 0;
while ((c = fi.read(b)) != -1) {
    response.getOutputStream().write(b);
}

fi.close();

Nao testei, mas deve funcionar… :wink:

Rafael

cancao

Rafael, não funciona por um simples motivo: para cada response o getOutputStream só pode ser invocado uma unica vez! O mesmo vale para o getWriter ou para uma combinação de ambos. Então, basta alterar um pequeno trecho do seu codigo para que fique assim:

byte[] b = new byte[2048];
int c = 0;
java.io.OutputStream out = response.getOutputStream();
while ((c = fi.read(b)) != -1) {
    out.write(b);
}

Enfim, basta tirar o response.getOutputStream() de dentro do while. :wink:

Até.

Rafael_Steil

“cancao”:

Rafael, não funciona por um simples motivo: para cada response o getOutputStream só pode ser invocado uma unica vez!

Em um servlet tudo bem, mas se vc jogar todo o codigo em um .jsp, vera que funciona :wink:

Rafael

cancao

“Rafael Steil”:
Em um servlet tudo bem, mas se vc jogar todo o codigo em um .jsp, vera que funciona :wink:

Rafael


Usando o response.getOutputStream()?! E por que essa diferença já que uma jsp é um servlet?! Fiquei sem entender agora. :roll:

Até.

Criado 21 de janeiro de 2004
Ultima resposta 23 de jan. de 2004
Respostas 4
Participantes 3