Imprimindo arquivos .PDF do servidor

3 respostas
chapolimCPT

Bom dia galera, estou com um grande problema aqui. Minha aplicação precisa de um impressão de alguns arquivos PDF, já está tudo ok, está gerando os arquivos e abrindo normalmente, no entanto na hora de imprimir não estou conseguindo fazer de forma correta. Para ficar mais claro, estava usando o Print do AWT para fazer a interação, no entando a impressão da primeira sai normal e a segunda sai de lado. Gostaria que algum dos amigos se já tiveram experiencia com isso se puderem me dar uma mãozinha.
Pra ficar bem claro, já estou pegando os PDFs, e já está imprimrindo, no entando imprime de maneira errada.

Aqui vai uma parte do código pra vocês darem uma olhada, peguei na internet uma parte, já alterei a orientação do papel, já modifiquei o tamanho do papel para A4 e continua vindo errado, já consultei o PDF também e ele está perfeito.

public void printPDF(List contratos) {
try {

for (Contrato c : contratos) {
            //ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("pdfs/contratos") + "/" + aditivo.getNumeroAditivo() + ".pdf"
            File file = new File(ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("pdfs/contratos/"+ c.getNumeroContrato() + ".pdf"));//document.pdf");


            if (file.getAbsolutePath().endsWith("pdf")) {

                // cria referencia do arquivo pdf
                FileInputStream fis = new FileInputStream(file);
                FileChannel fc = fis.getChannel();
                //ByteBuffer bb mudou para MappedByteBuffer
                //pois acusa erro de compilação
                MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
                PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page
                PDFPrintPage pages = new PDFPrintPage(pdfFile);

                // criar a funcao de imprimir
                PrinterJob pjob = PrinterJob.getPrinterJob();
                PageFormat pf = PrinterJob.getPrinterJob().defaultPage();

                //define tamanho do papel
                Paper paper = new Paper();
                paper.setSize(840, 860);//ou 840, 850 talvez
                paper.setImageableArea(0, 0, 840, 860);

                /*A4 sem borda
                paper.setSize(585, 832);
                paper.setImageableArea(0, 0, 585, 832);
                http://www.jpedal.org/gplSrc/org/jpedal/examples/simpleviewer/paper/PaperSizes.java.html*/

                pf.setPaper(paper);

                //
                pjob.setJobName(file.getName());
                Book book = new Book();
                book.append(pages, pf, pdfFile.getNumPages());
                pjob.setPageable(book);

                // envia a impressao para a impressora padrao
                pjob.print();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

3 Respostas

chapolimCPT

Resolvi o problema amigos … :slight_smile:

correainfo

Colega post a solucao para que outros que tiverem o mesmo problema consigam resolver.

chapolimCPT

Opa, concerteza!!!

Amigos, apenas troquei aquele código inteiro mostrado anteriormente por esta linha.

Desktop.getDesktop().print(new File(ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("pdfs/contratos/" + c.getNumeroContrato() + ".pdf")));

Como já tinha o documento completo apenas mando a requisição de impressão direto para a impressora, não sendo necessária a configuração de área de impressão e outras coisas.
[color=red]OBS: Como se trata de uma aplicação WEB, ainda não testei se no contexto do servidor irá funcionar normalmente, no entanto localmente funciona.
Vamos ver …[/color] (y)

Criado 18 de fevereiro de 2010
Ultima resposta 19 de fev. de 2010
Respostas 3
Participantes 2