Imprimer avec Java

Imprimer en java

Description

Ce tutoriel explique comment imprimer en java. Pour cela, nous utilisons :
- L'interface Printable afin de définir le contenu à imprimer
- La classe PrinterJob qui permet de lancer l'impression

La méthode décrite ci-dessous permet est assez basique et permet d'imprimer un rapport simple ou une copie d'une fenêtre de l'application. Pour des résultats plus soignés, vous pouvez utiliser JasperReport

L'interface Printable

Présentation

La documentation de cette interface se trouve ici : http://docs.oracle.com/javase/7/docs/api/java/awt/print/Printable.html

L'interface Printable définit la méthode print :

Paramètre Description
Graphics Permet de définir le contenu à imprimer
PageFormat Donne des informations sur le format de la page (orientation, taille, etc.)
int Donne le numéro de la page à imprimer
Retour Description
int Printable.NO_SUCH_PAGE si la page n'existe pas ou Printable.PAGE_EXISTS dans le cas contraire
Exceptions Description
PrinterException levée s'il y a un problème lors de la communication avec l'imprimante

Implémenter la méthode print

L'implémentation de la méthode print permet de définir la page à imprimer. Pour cela, on utilise l'objet de la classe graphics passé en paramètre.

Pour définir ce que nous voulons imprimer, nous disposons des méthodes de la classe graphics. Je liste ci-dessous les méthodes de base de cette classe :

Fonction Description
setColor() Permet de changer la couleur du crayon
setFont() Permet de changer le style d'écriture
drawString() Permet d'afficher un texte
fillRect() Permet de dessiner un rectangle

Pou plus d'informations, consultez la documentation de la classe Graphics

Pour nous repérer sur la page, nous utilisons l'objet PageFormat qui nous donne les coordonnées du coin supérieur gauche ainsi que la hauteur et la largeur de la page.

Exemple

public class Impression implements Printable {

        @Override
        public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
                if (pageIndex > 0) {
                        return NO_SUCH_PAGE;
                }
                /* On définit une marge pour l'impression */
                int marge=30;

                /* On récupère les coordonnées des bords de la page */
                int x = (int)pageFormat.getImageableX();
                int y = (int)pageFormat.getImageableY();
                int w = (int)pageFormat.getImageableWidth();
                int h = (int)pageFormat.getImageableHeight();

                /* Dessin d'un cadre gris clair*/
                graphics.setColor(Color.LIGHT_GRAY);
                graphics.fillRect(x+10, y+10, w-20, h-20);

                /* On écrit une ligne de titre en rouge, en gras de taille 18 */
                graphics.setFont(new Font("Arial", Font.BOLD, 18));
                graphics.setColor(Color.RED);
                graphics.drawString("Rapport\n", x + marge, y+marge);

                /* On écrit une ligne en noir de taille 14 */
                graphics.setFont(new Font("Arial", Font.PLAIN, 14));
                graphics.setColor(Color.BLACK);
                graphics.drawString("Première ligne du rapport", x+marge, y+marge+20);

                return PAGE_EXISTS;
        }
}

Centrer du texte

Voici une manière de centrer son texte. Dans la méthode print :

int w = (int)pageFormat.getImageableWidth();
int h = (int)pageFormat.getImageableHeight();
String texte="Le texte à centrer"
FontMetrics fm = graphics.getFontMetrics();
int xCentre = (w - fm.stringWidth(texte)) / 2;
int yCentre = (fm.getAscent() + h - (fm.getAscent() + fm.getDescent())) / 2);
graphics.drawString(texte, xCentre, yCentre);

Insérer une image

Pour insérer une image :

BufferedImage image = ImageIO.read(new File(adresseImage));
graphics.drawImage(image, 0, 0, null);

Pour insérer une copie d'une fenêtre, il suffit de créer une image correspondant à la copie d'une fenêtre :

BufferedImage tamponSauvegarde = new BufferedImage(
        fenetre.getPreferredSize().width, 
        fenetre.getPreferredSize().height, 
        BufferedImage.TYPE_3BYTE_BGR
);
Graphics g = tamponSauvegarde.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, fenetre.getSize().width, fenetre.getSize().height);
fenetre.paint(g);

Lancer l'impression

Pour imprimer le document, il faut envoyer le contenu à imprimer à un service d'impression. La classe PrinterJob permet de réaliser cette opération.

La classe PrinterJob

La documentation de cette classe se trouve ici : http://docs.oracle.com/javase/7/docs/api/java/awt/print/PrinterJob.html

Nous allons utiliser les méthodes suivantes de cette classe :

Fonction Description
PrinterJob.getPrinterJob() Permet de récupérer une instance de la classe PrinterJob
setPrintable() Permet de définir le contenu à imprimer
printDialog() Permet d'afficher une boite de dialogue avant d'imprimer, retourne false si l'opération est annulée, true sinon.
print() Permet de lancer l'opération d'impression

Exemple

PrinterJob job = PrinterJob.getPrinterJob();
/* On donne le contenu à imprimer au job */
job.setPrintable(printableObject);
/* Affichage de la boite de dialogue d'impression */
boolean doPrint = job.printDialog();
if(doPrint) {
        try {
                /* Lancement de l'impression */
                job.print();
        }
        catch (PrinterException e1) {
                e1.printStackTrace();
        }
} 
A voir également
Ce document intitulé « Imprimer avec Java » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous