Abrir arquivo PDF com servlet JSF [QUASE RESOLVIDO]

7 respostas
ibispo

Pessoal!

Olha eu aqui enchendo o saco novamente. É isso ai, novato em JAVA sofre muito…

No meu projeto, no arquivo WEB-INF/web.xml eu tenho o seguinte tag:

<servlet>
        <servlet-name>DownloadServlet</servlet-name>
        <servlet-class>com.jsos.download.DownloadServlet</servlet-class>
        <init-param>
            <param-name>dir</param-name>
            <param-value>c:/temp/</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DownloadServlet</servlet-name>
        <url-pattern>/servlet/DownloadServlet</url-pattern>
    </servlet-mapping>

Na minha classe de geração / impressão de PDF, eu tenho:

String caminhoArquivo = "C://temp/";

        // Document documento = new Document( PageSize.A4.rotate(), 0, 0, 0, 0 );
        Document documento = new Document( PageSize.A4 );

        documento.setMargins(-20, -20, 20, 10);

        PdfWriter.getInstance( documento,
            new FileOutputStream( caminhoArquivo + "/" + "pedidoVendas_" +
                                  Integer.toString(dadosUsu.getIdPessoa()) + ".pdf"));

E no meu arquivo de impressão.xhtml eu tenho:

window.open("#{facesContext.externalContext.requestContextPath}/servlet/DownloadServlet?pedidoVendas_1.pdf","janela","toolbar=no...")

Quando eu rodo o projeto, e clico no botão que aciona o window.open() na minha máquina funciona perfeito!


Agora quando eu publico a versão para uso em produção, ao clicar no botão, a janela popup aparece em branco com uma mensagem de que não encontrou o arquivo PDF em questão.

Alguém poderia me passar alguma dica de como resolver isso ou uma outra maneira de fazer?

Pessoal, tô meio desesperado, tenho q entregar o projeto até a próxima sexta-feira, ME AJUDEM!!!

7 Respostas

spycall

Você está salvando o PDF nesse diretorio, ou só está lendo dele, ou as duas coisas?

ibispo

Na verdade o projeto cria o PDF utilizando o iText utilizando o metodo PdfWriter.getInstance()

Sera q existe outro metodo que posso estar criando o PDF?

Na verdade o meu objetivo é que esse PDF seja criado numa pasta do servidor (independente de onde esteja)

E

ibispo:
Na verdade o projeto cria o PDF utilizando o iText utilizando o metodo PdfWriter.getInstance()

Sera q existe outro metodo que posso estar criando o PDF?

Na verdade o meu objetivo é que esse PDF seja criado numa pasta do servidor (independente de onde esteja)

Acredito q o arquivo fica numa pasta do servidor da sua aplicação certo?

entao vc nao pode obter o caminho dessa forma:

String caminhoArquivo = "C://temp/";

o ideal que vc tentasse obter o arquivo que esteja no servidor, algo assim:

//objeto do tipo ServletContext 
String caminhoArquivo = servletContext.getRealPath("pastaPDF/seuArquivoPDF.pdf");
ibispo

Oba, eBarros, valeu a resposta.

Só tem o seguinte: O meu projeto cria o PDF. O problema é informá-lo aonde ele vai criar isso.

Eu precisaria indicar em que lugar esse PDF deveria ficar. Essa “pastaPDF” que vc indicou, por exemplo, no servidor, ou em alguma pasta dentro do http://localhost:8080/Intranet/… onde exatamente eu deveria criar o PDF?

Lembrando que mtos usuarios irao utilizar-se desse relatório ao mesmo tempo, isto é, eles criam e usam.

Não sei se me fiz entender (desculpa ae).

ibispo

Opa galera,

Tô respondendo para voltar o assunto, que ainda não achei solução.

Se alguém puder me ajudar, meu prazo está ficando curto. :frowning:

vlw!

spycall

Acho melhor, em vez de vc salvar no servidor para depois ler, é criar e já mostrar direto, sem salvar em um diretório.

ibispo

Oba, cara,

Tem jeito de vc mostrar algum exemplo de como posso apresentar o PDF direto sem salvar?

Não tenho a minima ideia de como faco isso.

Criado 4 de fevereiro de 2009
Ultima resposta 5 de fev. de 2009
Respostas 7
Participantes 3