Desktop x web

4 respostas
A

Saudações!

Eu tenho aqui feito, um arquivo pdf. Ele foi feito pelo iText, porém voltado para o desktop(ambiente onde ele funciona perfeitamente). Quando tento importar esse pdf(códigos, bibliotecas, etc) para uma aplicação que já está funcionando, precisa apenas desse PDF gerado, dá erro! Suspeito que possa ser por que quando voce trabalha com arquivos, criação, vizualização etc você precisa de um espaço físico para ele poder ser criado. Quando passado para o ambiente web, creio que ele também precise se um espaço para poder ser gerado… Enfim Eu precisaria muito de um ajuda com isso porque estou com o prazo esgotando e ja querem o meu pescoço aqui… :roll:

Alguém que trabalha com isso poderia citar alguns prováveis problemas, ou o porque disso… Porque eu não trabalho sozinho mas meu colega também está com esse problema :cry:

AGRADEÇO a atenção dos usuários que puderem me ajudar :wink:

4 Respostas

fiaux

Mostra o erro pra galera poder tentar ajudar.

A

Gostaria de saber o que vou passar o HttpServletRequest e o HttpServletResponse, já que o método precisa para usar um xxx.getParameter
me ajudem!! =D

public void doGet (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        
        // we retrieve the presentationtype
        String presentationtype = request.getParameter("presentationtype");
        
        // step 1
        Document document = new Document();
        try {
            // step 2: we set the ContentType and create an instance of the corresponding Writer
            if ("pdf".equals(presentationtype)) {
                response.setContentType("application/pdf");
                PdfWriter.getInstance(document, response.getOutputStream());
            }
            else if ("html".equals(presentationtype)) {
                response.setContentType("text/html");
                HtmlWriter.getInstance(document, response.getOutputStream());
            }
            else if ("rtf".equals(presentationtype)) {
                response.setContentType("text/rtf");
                RtfWriter2.getInstance(document, response.getOutputStream());
            }
            else {
                response.sendRedirect("http://itextdocs.lowagie.com/tutorial/general/webapp/index.html#HelloWorld");
            }
            
            // step 3
            document.open();
            
            // step 4
            document.add(new Paragraph("Hello World"));
            document.add(new Paragraph(new Date().toString()));
        }
        catch(DocumentException de) {
            de.printStackTrace();
            System.err.println("document: " + de.getMessage());
        }
        
        // step 5: we close the document (the outputstream is also closed internally)
        document.close();
    }
Alexandre_Bitencourt

Olá,

Trabalhar com arquivos em um ambiente web não é muito interessante pois envolve questões de permissão de escrita nos diretórios do servidor e outros problemas difíceis de se lidar como a limpeza periódica dos arquivos gerados.

O interessante no seu caso seria gerar o pdf como um array de bytes e criar um Servlet para expor isso como se fosse um arquivo.

De forma genérica sua ação de gerar o PDF irá gerar um array de bytes, armazená-lo na sessão do usuário e direcionar o usuário de alguma forma para o Servlet. O Servlet irá retirar da sessão o array de bytes e jogá-lo na resposta para o usuário mudando o content type para pdf. O pdf irá aparecer no browser do usuário como se ele estivesse abrindo um arquivo pdf pela web.

Uma forma interessante de se fazer isso é mapear o Servlet para a extensão *.pdf, assim toda vez que vc redirecionar o usuário para um endereço .pdf ele irá pegar na sessão os bytes do pdf, alterar o content type e jogar o conteúdo do array na resposta.

Não se esqueça de tirar array da sessão depois de mandá-lo para o cliente para economizar memória no servidor. Além disso, dependendo do volume de requisições e do tamanho do PDF gerado essa solução pode consumir uma quantidade considerável de memória (vale a pena verificar o impacto através de um profiler).

Agindo dessa forma não há a necessidade de criar arquivos temporários nem de criar um processo para apagá-los periódicamente.

Espero ter ajudado!

abração,

Alexandre Fidélis Vieira Bitencourt

A

Pow alexandre eu agradeço porque sem dúvida foi um post mto bem elaborado o seu. Só que quando se trata de iniciantes em programação web como eu, isso se transforma em grego se é que voce me entende… =/
Será que vc poderia me mandar um exemplo rápido de como fazer isso ?
Agradeço o seu empenho!!
:slight_smile:

Criado 3 de abril de 2008
Ultima resposta 3 de abr. de 2008
Respostas 4
Participantes 3