Comunicação de Java com Impressoras

E aé galera gostaria de saber se alguém, sabe como posso fazer pra comunicar uma aplicação em java com impressoras em geral, principalmente matricial.

Essa é uma mão na roda :lol:


/*
 *  Created on 17 de Abril de 2007, 09:17
 *  author@ Diego Lorena Delgado
 */

package utils;


import java.awt.Component;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.print.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.swing.JOptionPane;
import posvirtual.DadosConfig;
 

 public class Impressao {
 
     private static PrintService impressora;
     private Component frame;
 
    /***************************************************************************
    | Construtor da classe
    ***************************************************************************/     
     public Impressao() {
         detectaImpressoras();
     }
 
    /***************************************************************************
    // O metodo verifica se existe impressora conectada e a
    // define como padrao.
    ***************************************************************************/     
     public void detectaImpressoras() {
         
        DadosConfig dados = null;
        try {
            dados = new DadosConfig();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
         try {
 
             DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
             PrintService[] ps = PrintServiceLookup.lookupPrintServices(df, null);
             for (PrintService p: ps) {
             //System.out.println("Impressora encontrada: " + p.getName());
                
                 if (p.getName().hashCode() == dados.getImpressora().hashCode())  {
 	             //System.out.println("Impressora Selecionada: " + p.getName());
                     impressora = p;
                     break;
                 }
 
             }
 
         } catch (Exception e) {
             e.printStackTrace();
         }
 
     }
 
     
    /***************************************************************************
    | Efetua a impressao, nao permite que seja feita mais de uma fora de ordem
    ***************************************************************************/          
     public synchronized boolean imprime(String texto) {
 
         // se nao existir impressora, entao avisa usuario
         // senao imprime texto
         if (impressora == null) {
 
             String msg = "Nenhuma impressora foi encontrada. Instale uma impressora padrao \r\n";
             JOptionPane.showMessageDialog(frame,msg);
 	     System.out.println(msg);
 
         } else {
 
             try {
 
                 DocPrintJob dpj = impressora.createPrintJob();
                 InputStream stream = new ByteArrayInputStream(texto.getBytes());
 
                 DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                 Doc doc = new SimpleDoc(stream, flavor, null);
                 dpj.print(doc, null);
 
                 //System.out.println("Documento foi impresso!");
                 return true;                 
 
             } catch (PrintException e) {
                 e.printStackTrace();
             }
 
         }
 
         return false;
 
     }
 
 }

ola, aproveitando que ja foi aberto um tópico sobre impressoras aqui eu tbm tenho uma duvida… estou desenvolvendo uma aplicação que possui uma função de gerar relatórios em pdf… como posso imprimir estes relatórios a partir da aplicaçao, sem abrir o arquivo?
vlw