Abrir arquivo PDF com servlet JSF [QUASE RESOLVIDO]

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!!!

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

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)

[quote=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)

[/quote]

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

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).

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!

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

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.