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
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 |
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.
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; } }
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);
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);
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 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 |
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(); } }