Abrir PDF no browser via Servlet

Boa tarde pessoal,

Preciso abrir um arquivo PDF no browser utilizando um Servlet.

estou fazendo o seguinte:

package br.servlet;


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OiMundo extends HttpServlet{
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String sFile = "teste.pdf";
				
		try{
			response.setContentType("application/pdf");
			response.setHeader("Content-Disposition", "atachment; filename=\"" + sFile);
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
}

Sei q está errado pois ele está tentando fazer download e nao é isso q quero, porem o download tb está com erro pois ele salva um arquivo d 0Kb. as duvidas sao:

como fazer pra ele abrir o arquivo e onde devo colocar o arquivo pdf?

abraço! valeu!

Você tem que ler o conteúdo arquivo e escrever no output do response, isto é , enviá-lo para o client.

Entao, mas isso vai fazer com q ele abra utilizando o Acrobat Reader? ou ele vai transformar em html comum?

valeu

Bom galera consegui! valeu pela ajuda leonardom!

segue o codigo:

package br.servlet;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OiMundo extends HttpServlet {

	byte[] arquivo = null;

	File file = new File("C:\\teste.pdf");

	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		try {
			arquivo = fileToByte(file);
		} catch (Exception e) {
			e.printStackTrace();
		}

		response.setContentType("application/pdf");
		response.setContentLength(arquivo.length);
		ServletOutputStream ouputStream = response.getOutputStream();
		ouputStream.write(arquivo, 0, arquivo.length);
		ouputStream.flush();
		ouputStream.close();
	}

	public static InputStream byteToInputStream(byte[] bytes) throws Exception {
		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
		return bais;
	}

	public static byte[] fileToByte(File imagem) throws Exception {
		FileInputStream fis = new FileInputStream(imagem);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		byte[] buffer = new byte[8192];
		int bytesRead = 0;
		while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
			baos.write(buffer, 0, bytesRead);
		}
		return baos.toByteArray();
	}
}

SE TODOS Q CONSEGUISSEM COLOCASSEM O CÓDIGO FICARIA BEM MAIS FACIL PARA QUEM PESQUISA DEPOIS!

:wink:

3 curtidas

andrerios, valeu pelo código, ajudou muito :slight_smile:

Parabéns andrerios, muito útil o código, concordo contigo, se o pessoal mostrasse o codigo facilitaria a vida de muita gente. Não é questão de “copiar” o código dos outros, mas muitas vezes nos deparamos com detalhes que não são o foco do desenvolvimento, e um trecho de código, como este que publicaste por exemplo, quebra um galhão.
Valeu!

SHOW();

muito bom…parabens ai pela iniciativa!

putss fiz igualzinhoo

mas acontece uns problemas…

um é quando dá problema falando que a memória do jvm acabou
e o outro é que ele não consegue abrir…
estou trabalhando com um arquivo de 34mb!

outro problema é quando eu tentei usando esse exemplo aqui:
http://www.javafree.org/viewtopic.jbb?t=870556

Nesse ultimo caso ele nao abre…
format error: Not a PDF or corrupted

mas no IE, no Browser do Eclise, e nos outros browser o pdf abre normalmente!!!

alguém conseguiu abrir no browser do firefox???
Sujere alguma coisa? vou postar meu codigo aqui!

vlw!


package br.com.projeto.client;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletAjuda extends HttpServlet {
	
	private static final int TAMANHO = 34398208;

	private byte[] arquivo;
	
	private File file;
	
	public byte[] getArquivo() {		
		return arquivo;
	}

	public void setArquivo(byte[] arquivo) {
		this.arquivo = arquivo;
	}

	public File getFile() {
		if (file == null) {
			file = new File("C:/Libs/HELP.pdf");			
		}
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("application/pdf"); 
		ServletOutputStream ouputStream = response.getOutputStream();
//		try {
//			setArquivo(fileToByte(getFile()));
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		try {
			preparaArquivo(ouputStream, getFile());
		} catch (Exception e) {
			e.printStackTrace();
		}
		response.setContentLength(TAMANHO);
		response.setHeader("Content-disposition", "attachment;filename=" +getFile().getName());   
//		ouputStream.write(getArquivo(), 0, getArquivo().length);
		ouputStream.flush();
		ouputStream.close();
	}

	public static InputStream byteToInputStream(byte[] bytes) throws Exception {
		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
		return bais;
	}

	public static byte[] fileToByte(File file) throws Exception {		
		FileInputStream fis = new FileInputStream(file);
//		int filelength = (int) arquivo.length();
//		byte[] buffer = new byte[filelength];
//		fis.read(buffer);
//		fis.close();
//		return buffer;
		
		ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        byte[] buffer = new byte[34394702];  
        int bytesRead = 0;  
        while ((bytesRead = fis.read(buffer, 0, 34394702)) != -1) {  
            baos.write(buffer, 0, bytesRead);  
        }  
        fis.close();        
        return baos.toByteArray();
	}
	
	
	public void preparaArquivo(ServletOutputStream ouputStream, File file) throws Exception{
//		int filelength = (int) file.length();
		int tamanho = TAMANHO; 
		byte buff[] = new byte[tamanho];
		FileInputStream fis = new FileInputStream(file);
		try{
			BufferedInputStream buffer = new BufferedInputStream(fis);
			int i;
			while((i = buffer.read(buff, 0, tamanho)) != -1){     
				ouputStream.write(buff, 0, i);
			}			
			buffer.close();
		}catch (Exception e) {
			e.printStackTrace();
			e.getMessage();
			e.getCause();
		}
	}
	


}

vlw de novo

não teve jeito, tive que tirar o pdf do meu projeto.
fiz em html: simples, rápido, menor dependencia.

abração para todos