Foro de elhacker.net

Programación => Java => Mensaje iniciado por: ZeroVzla en 11 Marzo 2010, 20:38 pm



Título: Imprimir sin ventana de dialogo
Publicado por: ZeroVzla en 11 Marzo 2010, 20:38 pm

Hola.. Estoy creando un aplicacion que genera unos boletos, en esos boletos se tiene que imprimir un codigo de barra. Bueno el codigo de barra lo genero facilmente, luego mando a imprimir este codigo pero el programa me muestra una ventana de dialogo para elegir la impresoa y las opciones de impresion.. Lo que quiero es poder imprimir sin que aparezca esta ventana de dialogo sino que una vez enviada la peticion de impresion se imprima sin preguntar nada..
esto es lo que tengo..



Código
  1. import java.awt.print.*;
  2.  
  3. import javax.print.PrintService;
  4.  
  5. import net.sourceforge.barbecue.*;
  6.  
  7.    public class PrintingExample
  8.    {
  9.  
  10.     public static void main(String[] args)
  11.     {
  12.     try
  13.     {
  14.  
  15.     Barcode b = BarcodeFactory.createCode128("000100");
  16.     PrinterJob job = PrinterJob.getPrinterJob();
  17.     job.setPrintable(b);
  18.     job.setJobName("boleto");
  19.     job.setCopies(1);
  20.     job.setPrintService(service);
  21.  
  22.     //if (job.printDialog())
  23.     {
  24.     job.print();
  25.     }
  26.     }
  27.     catch (Exception e)
  28.     {
  29.     e.printStackTrace();
  30.     }
  31.  
  32.     }
  33.  
  34.   }
  35.  
  36.  

En este codigo comento el if (job.printDialog()), si se hace eso lo que ocurre es que comienza la impresion pero la cancela rapidamente y por lo tanto la hoja sale en blanco..

Bueno Muchas Gracias :D


Título: Re: Imprimir sin ventana de dialogo
Publicado por: mayofunk en 15 Marzo 2010, 05:32 am
abstract void print()Prints a set of pages.
void print(PrintRequestAttributeSet attributes) Prints a set of pages using the settings in the attribute set.
abstract  boolean printDialog()Presents a dialog to the user for changing the properties of the print job.
boolean    printDialog(PrintRequestAttributeSet attributes) A convenience method which displays a cross-platform print dialog for all services which are capable of printing 2D graphics using the Pageable interface.

Por lo que veo en la documentación me da la impresión de que si ocupas print() o bien print(PrintRequestAttributeSet attributes), con setteos previos no deberia aparecer el dialogo !

Avisanos que tal te va !


Título: Re: Imprimir sin ventana de dialogo
Publicado por: ZeroVzla en 19 Junio 2010, 01:43 am
Bueno revivo esto por si alguien tenia la misma duda..

A la final no entendí muy bien qué sucedia, lo unico que puedo decirles es que sobrescribi el método print() de la clase PrinterJob para que imprimiera el código de barras que era generado dentro del mismo método print luego de ser transformado en una imagen... Tambien me di cuenta que cuando posicionaba ya sea un caracter, un string o cualquier objeto a imprimir en una coordenada menor a (80,80) osea (80,70) o (70,80) se me presentaba la situación expuesta en el primer post...

Así que bueno espero les sirva un poco lo anterior y si alguien está interesado en el codigo puede pedirlo por aquí... no lo posteo porque no lo tengo en la pc con la que escribí este post pero si alguien lo necesita de seguro lo coloco :D..

saludos.. ZeroVzla..!!!


Título: Re: Imprimir sin ventana de dialogo
Publicado por: vale_1985 en 8 Agosto 2010, 16:34 pm
Hola ZeroVzla, me podrias decir como lo hiciste? Porque a mi tambien me imprime la pagina en blanco, no me importa si aparece el cuadro de dialogo, gracias de antemano!!!


Título: Re: Imprimir sin ventana de dialogo
Publicado por: 1mpuls0 en 11 Agosto 2010, 00:07 am
Hola que tal vale_1985

mira encontré este código, la verdad no estoy seguro de si funciona porque lo probé con una impresora virtual pdf.

Código
  1. package com.foro;
  2. import java.io.BufferedInputStream;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6.  
  7. import javax.print.Doc;
  8. import javax.print.DocFlavor;
  9. import javax.print.DocPrintJob;
  10. import javax.print.PrintException;
  11. import javax.print.PrintService;
  12. import javax.print.PrintServiceLookup;
  13. import javax.print.SimpleDoc;
  14.  
  15.  
  16. public class printWithoutDialog {
  17.  
  18. public static void main(String[] args) {
  19. new printWithoutDialog();
  20. }
  21.  
  22. public printWithoutDialog(){
  23. try {
  24. // Open the image file
  25. new FileInputStream("C:\\duke.gif"));
  26.  
  27. // Find the default service
  28. DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
  29. PrintService service = PrintServiceLookup.lookupDefaultPrintService();
  30.  
  31. // Create the print job
  32. DocPrintJob job = service.createPrintJob();
  33. Doc doc = new SimpleDoc(is, flavor, null);
  34.  
  35. // Monitor print job events; for the implementation of PrintJobWatcher,
  36. // see Determining When a Print Job Has Finished  
  37. PrintJobWatcher pjDone = new PrintJobWatcher(job);
  38.  
  39. // Print it
  40. job.print(doc, null);
  41.  
  42. // Wait for the print job to be done
  43. pjDone.waitForDone();
  44.  
  45. // It is now safe to close the input stream
  46. is.close();
  47. } catch (PrintException e) {
  48.  
  49. } catch (IOException e) { }
  50. }
  51.  
  52. }
  53.  


Código
  1. package com.foro;
  2. import javax.print.DocPrintJob;
  3. import javax.print.event.PrintJobAdapter;
  4. import javax.print.event.PrintJobEvent;
  5.  
  6.  
  7. public class PrintJobWatcher {
  8. // true if it is safe to close the print job's input stream
  9. boolean done = false; PrintJobWatcher(DocPrintJob job) {
  10.  
  11. // Add a listener to the print job
  12. job.addPrintJobListener(new PrintJobAdapter() {
  13. public void printJobCanceled(PrintJobEvent pje) {
  14. allDone();
  15. }
  16.  
  17. public void printJobCompleted(PrintJobEvent pje) {
  18. allDone();
  19. }
  20.  
  21. public void printJobFailed(PrintJobEvent pje) {
  22. allDone();
  23. }
  24.  
  25. public void printJobNoMoreEvents(PrintJobEvent pje) {
  26. allDone();
  27. }
  28.  
  29. void allDone() {
  30. synchronized (PrintJobWatcher.this) {
  31. done = true; PrintJobWatcher.this.notify();
  32. }
  33. }
  34. });
  35. }
  36.  
  37. public synchronized void waitForDone() {
  38. try {
  39. while (!done) {
  40. wait();
  41. }
  42. } catch (InterruptedException e) {
  43. }
  44. }
  45.  
  46. }
  47.  

Solo asegurate de que el archivo existe, en este ejemplo utiliza una imagen tipo gif.

Un saludo


Título: Re: Imprimir sin ventana de dialogo
Publicado por: vale_1985 en 11 Agosto 2010, 14:12 pm
Muchisimas gracias! Voy a probar  ;D