sexta-feira, 6 de novembro de 2009

Impressão Direta de PDF com Java

Neste exemplo, imprimimos um arquivo PDF direto do sistema. Para isso, basta informar uma parte ou todo o nome da impressora e indicar a localização do arquivo. Minha impressora é a printer001 e o meu arquivo como podem ver é o c:/teste.pdf. Deixem seus comentários.

package printpdf;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;

public class PrintPDFFactory {

    private static PrintService impressora; 

    public void printPDF(File f){

        try{
            DocFlavor dflavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
            PrintService[] impressoras = PrintServiceLookup.lookupPrintServices(dflavor, null);
            for(PrintService ps : impressoras){
                System.out.println("Impressora Encontrada: "+ps.getName());
                if(ps.getName().contains("printer001")){
                    System.out.println("Impressora Selecionada: "+ps.getName());
                    impressora = ps;
                    break;
                }
            }
            DocPrintJob dpj = impressora.createPrintJob(); 
            FileInputStream fis = new FileInputStream(f);
            byte[] buffer = new byte[fis.available()];
            int buff = 0;
            while((buff = fis.available()) != 0){
                fis.read(buffer, 0, buff);
            }
            System.out.println(new String(buffer));
            InputStream stream = new ByteArrayInputStream(buffer); 
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
            Doc doc = new SimpleDoc(stream, flavor, null); 
            dpj.print(doc, null);
           
        }catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        PrintPDFFactory pdffactory = new PrintPDFFactory();
        pdffactory.printPDF(new File("c:/teste.pdf"));
    }
}