2009-04-15 161 views

Respuesta

21

Aquí hay un ejemplo para imprimir cualquier componente Swing.

Esto imprime el contenido de Component llamado componenet_name. Asegúrate de que esté visible para este método.

public void printComponenet(){ 

    PrinterJob pj = PrinterJob.getPrinterJob(); 
    pj.setJobName(" Print Component "); 

    pj.setPrintable (new Printable() {  
    public int print(Graphics pg, PageFormat pf, int pageNum){ 
     if (pageNum > 0){ 
     return Printable.NO_SUCH_PAGE; 
     } 

     Graphics2D g2 = (Graphics2D) pg; 
     g2.translate(pf.getImageableX(), pf.getImageableY()); 
     componenet_name.paint(g2); 
     return Printable.PAGE_EXISTS; 
    } 
    }); 
    if (pj.printDialog() == false) 
    return; 

    try { 
     pj.print(); 
    } catch (PrinterException ex) { 
     // handle exception 
    } 
} 
+2

¿cómo se puede escalar el componente en consecuencia en la página para que quepa? –

+1

@Saher ¿alguna vez descubrió cómo hacer esto? Gracias –

+0

¿podría agregar más explicaciones (texto)? ¿Se supone que uno deriva un JComponent y agrega este método o qué se debe hacer con esto? Gracias. –

4

Una forma sencilla de hacerlo sería implementando la interfaz Printable (en java.awt.print) y añadiendo el print método especificado (que funciona de forma similar a paint -en aquí, puede especificar qué componentes que se quiere dibujar sobre la página impresa) Y cuando desee imprimir el contenido del panel, obtenga una instancia PrinterJob y llame al método setPrintable, pasando el objeto que implementó Printable.

Eso es solo una vista general rápida, sin embargo. Recomiendo echar un vistazo al Sun's tutorial on printing para obtener más información.

0

simplemente edite y coloque el nombre de su marco, panel (jPanel1) y botón (imprimir). 'esto' se refiere a la clase JFrame (es decir, mi clase extiende javax.swing.JFrame) simplemente ponga la referencia de su marco en lugar de 'esto'.

private void PritnActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    Toolkit tkp = jPanel1.getToolkit(); 
    PrintJob pjp = tkp.getPrintJob(this, null, null); 
    Graphics g = pjp.getGraphics(); 
    jPanel1.print(g); 
    g.dispose(); 
    pjp.end(); 
} 
Cuestiones relacionadas