Imprimir pdf

13 respostas
V

Ola pessoal…

Estou precisando imprimir varios pdf’s, nao qro visualiza-los para mandar imprimir 1 a 1, preciso enviar direto para a impressora padrao.
Alguem tem alguma dica ?

flw…

13 Respostas

neeryck

Pow legal também quero saber !!

Mais só pra a galera saber e ficar claro…
Vc ta usando Jasper???

Poneis123

Não consegui ver tudo certinho, mas acho que esse post resolve seu problema…

http://www.guj.com.br/posts/list/68823.java

da uma olhada se ajuda, é para impressão de pdf sem vizualiza-los.

Espero que ajude,
abraço.

V

Nao estou utilizando jasper… Eu pego os pdf’s já existentes de uma pasta, mas nao quero abri-los 1 a 1, preciso ler a posta toda e mandar imprimir todos os pdf’s que estejam lá.

V

Poneis123 o post que vc indicou já tinha dado uma olhada, mas esta api nao da suporte a pdf.

valeu…

V

Consegui resolver…

/* Envia direto para impressora padrao - apenas para java 6 */
Desktop.getDesktop().print(new File("fileName"));
Mackrophus

Olá vdb.
Cara eu usei o teu exemplo e ele abre uma tela do Adobe Reader depois de enviar a impressão, tem como desabilitar isso?

Mackrophus

Só 4 anos depois. rsrsrsrs

V

Entao cara, pra mim não acontece isso, utilizo este metodo para imprimir boletos em massa e nunca abriu, so seu utilizar open e nao print.

Mackrophus

Estranho, pra mim ele abre, mas, fica aberto, sem documento nem nada, somente o Reader em branco, mas, se eu mandar 10 impressões ele abre somente uma.

E

vdb:
Consegui resolver…

/* Envia direto para impressora padrao - apenas para java 6 */ Desktop.getDesktop().print(new File("fileName"));

E como faria isso no java 5 ???

J

edneyfs:
vdb:
Consegui resolver…

/* Envia direto para impressora padrao - apenas para java 6 */ Desktop.getDesktop().print(new File("fileName"));

E como faria isso no java 5 ???

Boa noite,
A quem interessar e não tiver resolvido ainda esta questão existe uma api da SUN pdf-renderer-1.0.5.jar com esta api mais as classes nativa de impressão do java consegui resolver este problema, agora consigo enviar o PDF direto para impressora sem precisar abrir o mesmo e ou ter o adobe instalado.

/**
 *
 * @author Jaime Alcides
 */
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;

import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import com.sun.pdfview.PDFRenderer;
import javax.print.PrintService;


public class PrintPdf
{

    private PrinterJob pjob = null;
    static String imp = "";
    private PrintService impressora = null;

    public static void main(String[] args) throws IOException, PrinterException
    {
        imp = args[1];
        System.out.println("Imprimir: " + args[0] + " /n" + args[1]);

        FileInputStream fis = new FileInputStream(args[0]);
        PrintPdf printPDFFile = new PrintPdf(fis, "NOME DO ARQUIVO NA FILA DE IMPRESSAO");

        printPDFFile.print();
    }

    public PrintPdf(InputStream inputStream, String jobName) throws IOException, PrinterException
    {
        byte[] pdfContent = new byte[inputStream.available()];
        inputStream.read(pdfContent, 0, inputStream.available());
        initialize(pdfContent, jobName);
    }

    public PrintPdf(byte[] content, String jobName) throws IOException, PrinterException
    {
        initialize(content, jobName);
    }

    private void initialize(byte[] pdfContent, String jobName) throws IOException, PrinterException
    {
        ByteBuffer bb = ByteBuffer.wrap(pdfContent);

        PDFFile pdfFile = new PDFFile(bb);
        PDFPrintPage pages = new PDFPrintPage(pdfFile);

        PrintService[] pservices = PrinterJob.lookupPrintServices();

        System.out.println(pservices.length);
        if (pservices.length > 0)
        {
            for (PrintService ps : pservices)
            {
                System.out.println("Impressora Encontrada: " + ps.getName());


                if (ps.getName().contains(imp))
                {
                    System.out.println("Impressora Selecionada: " + ps.getName());
                    impressora = ps;
                    break;
                }
            }
        }
        if (impressora != null)
        {
            pjob = PrinterJob.getPrinterJob();
            pjob.setPrintService(impressora);

            PageFormat pf = PrinterJob.getPrinterJob().defaultPage();

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

            Paper paper = new Paper();

            paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
            pf.setPaper(paper);
        }
    }

    public void print() throws PrinterException
    {
        if (impressora != null)
        {
            System.out.println("IMPRIMINDO....");
            pjob.print();
        }

    }
}

class PDFPrintPage implements Printable
{

    private PDFFile file;

    PDFPrintPage(PDFFile file)
    {
        this.file = file;
    }

    public int print(Graphics g, PageFormat format, int index) throws PrinterException
    {
        int pagenum = index + 1;
        if ((pagenum >= 1) && (pagenum <= file.getNumPages()))
        {
            Graphics2D g2 = (Graphics2D) g;
            PDFPage page = file.getPage(pagenum);

            Rectangle imageArea = new Rectangle((int) format.getImageableX(), (int) format.getImageableY(),
                    (int) format.getImageableWidth(), (int) format.getImageableHeight());
            g2.translate(0, 0);
            PDFRenderer pgs = new PDFRenderer(page, g2, imageArea, null, null);
            try
            {
                page.waitForFinish();
                pgs.run();
            } catch (InterruptedException ie)
            {
                System.out.println(ie.toString());
            }
            return PAGE_EXISTS;
        } else
        {
            return NO_SUCH_PAGE;
        }
    }
}
mateusviccari

Boa noite,
A quem interessar e não tiver resolvido ainda esta questão existe uma api da SUN pdf-renderer-1.0.5.jar com esta api mais as classes nativa de impressão do java consegui resolver este problema, agora consigo enviar o PDF direto para impressora sem precisar abrir o mesmo e ou ter o adobe instalado.

Eu também uso este método, o bom dele é que da pra escolher a impressora que quer imprimir, diferente daquela lib do ireport que manda sempre na impressora padrão.

Mackrophus

Eu mudei minha classe para usar essa também, somente fiz uma tela de configuração para o cliente poder escolher em qual tela ele quer que a aplicação mande imprimir, e quando ele quer escolher ele abre o pdf e usa o gerenciador do Reader, ficou muito mais prático.

Criado 23 de setembro de 2009
Ultima resposta 7 de mai. de 2012
Respostas 13
Participantes 7