CodeS-SourceS
Rechercher un code, un tuto, une réponse

Imprimer avec Java

Avril 2017


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ètreDescription
GraphicsPermet de définir le contenu à imprimer
PageFormatDonne des informations sur le format de la page (orientation, taille, etc.)
int Donne le numéro de la page à imprimer

RetourDescription
intPrintable.NO_SUCH_PAGE si la page n'existe pas ou Printable.PAGE_EXISTS dans le cas contraire

ExceptionsDescription
PrinterExceptionlevé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 :
FonctionDescription
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 :
FonctionDescription
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

Publié par cs_Julien39.
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.
Ajouter un commentaire

Commentaires

Donnez votre avis
Envoi d'un mail avec javamail
Gestion des fichiers