Imprimir sin ventana de dialogo

Iniciado por ZeroVzla, 11 Marzo 2010, 20:38 PM

0 Miembros y 1 Visitante están viendo este tema.

ZeroVzla


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 (java) [Seleccionar]

import java.awt.print.*;

import javax.print.PrintService;

import net.sourceforge.barbecue.*;

   public class PrintingExample
   {
   
    public static void main(String[] args)
    {
    try
    {

    Barcode b = BarcodeFactory.createCode128("000100");
    PrinterJob job = PrinterJob.getPrinterJob();
    job.setPrintable(b);
    job.setJobName("boleto");
    job.setCopies(1);
    job.setPrintService(service);
   
    //if (job.printDialog())
    {
    job.print();
    }
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
   
    }
   
  }



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

mayofunk


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 !

ZeroVzla

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..!!!

vale_1985

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!!!

1mpuls0

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 (java) [Seleccionar]

package com.foro;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;


public class printWithoutDialog {

public static void main(String[] args) {
new printWithoutDialog();
}

public printWithoutDialog(){
try {
// Open the image file
InputStream is = new BufferedInputStream(
new FileInputStream("C:\\duke.gif"));

// Find the default service
DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
PrintService service = PrintServiceLookup.lookupDefaultPrintService();

// 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 Determining When a Print Job Has Finished 
PrintJobWatcher pjDone = new PrintJobWatcher(job);

// 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) {

} catch (IOException e) { }
}

}



Código (java) [Seleccionar]

package com.foro;
import javax.print.DocPrintJob;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;


public class PrintJobWatcher {
// true if 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) {
}
}

}


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

Un saludo
abc

vale_1985

Muchisimas gracias! Voy a probar  ;D