Usando el Netbeans creamos un jDialog y le agregamos un jPanel. Dentro de ese jPanel le agregamos por ejemplo una jTable, un label y un jButton. Tal y como muestra la siguiente captura:
Codigo:
//Imprimir un jPanel y con todos sus componentes internos.
package imprimir;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
public class Impresiones extends javax.swing.JDialog implements Printable {
public Impresiones(java.awt.Frame parent, boolean modal) {
initComponents();
}
private void initComponents() {...}//aqui va codigo generado por Netbeans
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
job.printDialog();
job.print();
} catch (PrinterException ex) { }
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Impresiones dialog = new Impresiones(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex > 0) return NO_SUCH_PAGE;
Graphics2D g2d = (Graphics2D)graphics;
//Punto donde empezará a imprimir dentro la pagina (100, 50)
g2d.translate( pageFormat.getImageableX()+100,
pageFormat.getImageableY()+50);
g2d.scale(0.50,0.50); //Reducción de la impresión al 50%
jPanel1.printAll(graphics);
return PAGE_EXISTS;
}
}
Resultado:
hola que tal, buen aporte pero tengo dos dudas? que hace el NO_SUCH_PAGE y el PAGE_EXIST? lo que pasa es que me marca dos errores precisamente en eso :S
ResponderEliminarHola Ivonne, si te marca ese error es que seguramente te has dejado de implementar "Printable" en la clase principal (hay que ponerlo manualmente). Debe quedar así:
Eliminarpublic class Impresiones extends javax.swing.JDialog implements Printable {
Un saludo,
Hola podes poner los .jar es que me sale el mismo error o tal ves peor
ResponderEliminarException in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: defaultCloseOperation must be one of: DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, or DISPOSE_ON_CLOSE
at javax.swing.JDialog.setDefaultCloseOperation(JDialog.java:753)
at imprimir.Impresiones.initComponents(Impresiones.java:106)
at imprimir.Impresiones.(Impresiones.java:16)
at imprimir.Impresiones$2.run(Impresiones.java:162)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
GENERACIÓN CORRECTA (total time: 1 second)
ya logre imprimir Pero ahora me surge otra duda en la impresion sale con poca resolucion algo asi como pocos pixeles abra alguna manera de qque se note mejor la resolucion o mejor que se imprima tal y como es en el monitor.
ResponderEliminarPrueba de cambiar la escala de la imagen, pasar del 0.50 al 1:
Eliminarg2d.scale(0.50, 0.50); //50%
g2d.scale(1, 1); //100%
gracias por el aporte
ResponderEliminarDisculpa yo trabajo con el IDE ECLIPSE y me gustaría saber en:
ResponderEliminarprivate void initComponents() {...}
Que podría poner por ejemplo para ver el funcionamiento de la impresión.
Gracias.
ahí va solo el diseño del panel, que en netbeans te lo autogenera, No se como haras tus paneles en eclipse, si con algun layout, o le pones setbounds, cualquiera de las dos formas, esas construcciones irian en el initComponents()
EliminarHola soy principiante con JAVA y estoy ya apunto de terminar un proyecto y me sale estos errores por fa colaboren me
ResponderEliminarException in thread "AWT-EventQueue-0" java.lang.NullPointerException
at consulcorreo.Grafconsul.cargar(Grafconsul.java:53)
at consulcorreo.Grafconsul.(Grafconsul.java:27)
at consulcorreo.Grafconsul$5.run(Grafconsul.java:227)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
ResponderEliminartry {
PrinterJob job = PrinterJob.getPrinterJob();
Robot robot = new Robot();
robot.mouseMove(385, 355);
// robot.delay(20000);
// robot.mousePress(InputEvent.BUTTON1_MASK);
// robot.mouseRelease(InputEvent.BUTTON1_MASK);
if ( job.printDialog())
{
// robot.mousePress(InputEvent.BUTTON1_MASK);
// robot.mouseRelease(InputEvent.BUTTON1_MASK);
try {
job.setPrintable((Printable) this);
job.print();
} catch (PrinterException ex) { }
}
//ANIMACION PROGRES BAR
// int x =500;
// new Thread(new Job1( Integer.valueOf(50))).start();
// new Thread(new jcThreadI( this.jProgressBar1 , Integer.valueOf(500) ) ).start();
} catch (AWTException ex) {
Logger.getLogger(Imprime.class.getName()).log(Level.SEVERE, null, ex);
}
}
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex == 0)
{
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX()+20,
pageFormat.getImageableY()+30);
g2d.scale(0.77,0.77); //Reducción de la impresión al 50%
panelImprime.printAll(graphics);
Graphics2D g3d = (Graphics2D) graphics;
g3d.translate(pageFormat.getImageableX()+0.1,
pageFormat.getImageableY()+500);
g3d.scale(1,1); //Reducción de la impresión al 50%
panelImprime.printAll(graphics);
return PAGE_EXISTS;
}
else
return NO_SUCH_PAGE;
}
Pero en la clase debes poner
public class Imprime extends javax.swing.JFrame implements Printable {
.
.
.
http://tingsystems.com/2012/08/31/imprimir-con-java-2da-parte/
ResponderEliminarHola, quisiera hacerte una pregunta:
ResponderEliminarcomo puedo imprimir todo el contenido del jdialog form?
desde ya muy agradecido
saludos!!
Te amo.
ResponderEliminarEres mi dios, me has salvado la vida.
Eres el puto amo.
hola tengo este error como lo soluciono ??
ResponderEliminarjava.awt.print.PrinterException: Paper's imageable height is too small.
buenas soy nuevo en java y estoy trabajando con formularios y necesito imprimir los datos que contiene un formulario solo los datos no los componentes
ResponderEliminarExcelente aporte, me salvaste, el código funciona perfecto !!!! Muchas gracias
ResponderEliminarMuchas gracias execelente trabajo
ResponderEliminarhola como esta, estuve provando el codigo me marca un error en el this
ResponderEliminar