Imprimindo arquivos .PDF do servidor

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();
    }

}

Resolvi o problema amigos … :slight_smile:

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

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)

1 curtida