Impresión del área de un JFrame Java

Ejemplo de impresion de un área de un JFrame, en nuestro caso nos interesa imprimir solo lo que esta en un JPanel el cual nombraremos como «factura»

//Paquetes Necesarios
import java.awt.*;
import java.awt.print.*;

Creamos el Metodo que para llevar a cabo la impresión, es importante añadir las recomendaciones que muestre por ejemplo Netbeans para el manejo de excepciones

//Metodo Imprimir
public int print(Graphics graf, PageFormat pagfor, int page) throws PrinterException
    {
        if(page > 0)//Esto porque solo es una página que se imprime
        {
            return NO_SUCH_PAGE;
        }
        Graphics2D bot = (Graphics2D) graf;
        bot.translate(pagfor.getImageableX() + 30, pagfor.getImageableY()+ 30);
        bot.scale(1.0, 1.0);//Tamaño normal, si quisieramos el doble seria 2.0, 2.0
        factura.printAll(graf);//Imprime todo lo que hay en el JPanel factura
        return PAGE_EXISTS;
    }

Asumiendo que tenemos un botón que manda a imprimir agregaremos el siguiente código dentro de nuestro botón

 try
        {
            PrinterJob imprticket = PrinterJob.getPrinterJob();
            imprticket .setPrintable(this);
            boolean impr = imprticket .printDialog();
            
            if(impr)
            {
                imprticket.print();
            }
        }
        catch(PrinterException pex)
        {
            System.out.println("Error\n" + pex);
        }