Impressão de Relatório

3 respostas
oliveirarenan

Pessoal, tenho uma classe para imprimir relatórios, só que não esta fazendo a conexão com a impressora do servidor.

Alguém poderia me ajudar?

import java.io.*; 
import javax.print.*; 
import javax.print.event.*; 

import java.net.MalformedURLException; 
import java.rmi.Naming; 
import java.rmi.NotBoundException; 
import java.rmi.RemoteException; 

public class BasicPrint { 

public static void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException { 
   try { 
      // Open the image file 
      //InputStream is = 
      //new BufferedInputStream(new FileInputStream("filename.gif")); 
      String is = "impressão da classe String teste para impressão"; 
      String impressora = "wksosa2097"; 
       
      // Find the default service 
      DocFlavor flavor = DocFlavor.URL.STRING.TEXT_PLAIN; 
      System.out.println("passou pela criação do docFlavor"); 
      //PrintService service  = PrintServiceLookup.lookupDefaultPrintService(); 
      PrintService service =   (PrintService) 
      Naming.lookup(impressora); 
      System.out.println("impressora: " + service.toString()); 
      // Create the print job 
      DocPrintJob job = service.createPrintJob(); 
      Doc doc = new SimpleDoc(is, flavor, null); 
       
      // Monitor print job events; for the implementation of PrintJobWatcher, 
      // see e702 Determining When a Print Job Has Finished 
      PrintJobWatcher pjDone = new PrintJobWatcher(job); 
      System.out.println(doc.getDocFlavor()); 
      // Print it 
      job.print(doc, null); 
       
      // Wait for the print job to be done 
      pjDone.waitForDone(); 

   // It is now safe to close the input stream 
   //is.close(); 
   } catch (PrintException e) { 
      e.printStackTrace(); 
   //} catch (IOException e) { 
   //} 
   } 
} 
}

O Basic Print é responsável por :

  • Criar o tipo de documento que será impresso,

  • Estabelecer conexão com a impressora, (Não esta funcionando!)

  • Imprimir o conteúdo da classe, (Não esta funcionando!)

Também tem essa outra classe q é responsável por verificar se a impressão foi realizada.

import javax.print.DocPrintJob; 
import javax.print.event.PrintJobAdapter; 
import javax.print.event.PrintJobEvent; 
import javax.print.event.PrintJobAdapter; 

class PrintJobWatcher { 
      // true iff it is safe to close the print job's input stream 
      boolean done = false; 
    
      PrintJobWatcher(DocPrintJob job) { 
         // Add a listener to the print job 
         job.addPrintJobListener(new PrintJobAdapter() { 
            public void printJobCanceled(PrintJobEvent pje) { 
               allDone(); 
            } 
            public void printJobCompleted(PrintJobEvent pje) { 
               allDone(); 
            } 
            public void printJobFailed(PrintJobEvent pje) { 
               allDone(); 
            } 
            public void printJobNoMoreEvents(PrintJobEvent pje) { 
               allDone(); 
            } 
            void allDone() { 
               synchronized (PrintJobWatcher.this) { 
                  done = true; 
                  PrintJobWatcher.this.notify(); 
               } 
            } 
         }); 
      } 
      public synchronized void waitForDone() { 
         try { 
            while (!done) { 
               wait(); 
            } 
         } catch (InterruptedException e) { 
         } 
      } 
   }

Alguém tem alguma solução???

Valeu!

3 Respostas

E

ao invés de ficar se matando é melhor usar geradores de relatórios como iReport ou FOP. O FOP é usado para formatar textos e o resultado pode ser um arquivo XML, RTF, PDF …

http://xml.apache.org/fop

http://www.guj.com.br/java.artigo.153.1.guj

oliveirarenan

Eddie,

Valeu cara.

Eu segui o tutorial q tem um exemplo e ficou legal, só que não rodou…como eu faço pra rodar???

Tenho q baixar o FOP? Tem q baixar mais alguma coisa?
Configurar o path…qual é o procedimento?

falow

:wink:

E

baixe o FOP e coloque no classpath todos os JARs que existirem nos diretórios dele.

Criado 28 de outubro de 2004
Ultima resposta 29 de out. de 2004
Respostas 3
Participantes 2