précédent | suivant | table des matières

Impressions de Graphics

Sommaire
  1. Principe de base
  2. Processus d'impression
  3. Printable
  4. PrinterJob
    1. Méthodes de PrinterJob
  5. Configuration de la page
  6. Impression dans un fichier.PS
  7. Book

1Principes de base

On utilise l'API « Print » du paquetage java.awt.print.

Cette API permet d'imprimer des textes contenus dans un composant texte (TextArea, JTextPane, JEditorPane, etc...) aussi bien qu'une interface utilisateur complète. 

2Processus d'impression

Le processus d'impression est l'ensemble des actions que réalise un programme pour envoyer des données vers une imprimante.

3Printable

Pour être imprimable, une classe doit implémenter l’interface l'interface Printable.

L’interface Printable définit deux constantes et une méthode : 

La méthode print est la méthode appelée par une instance de la classe PrinterJob.

Les paramètres de print sont : 

Exemple :

import java.awt.*;
import java.awt.print.*;

public class PremierExemple extends JPanel implements Printable {
   public PremierExemple() { }
   
   public int print( Graphics g, PageFormat pf, int pi){
       // Imprime 2 pages
      if(pi>=2) return NO_SUCH_PAGE;
      g.setFont(new Font("arial", Font.BOLD, 30));
      FontMetrics fm = g.getFontMetrics();
      int X = (int) pf.getImageableX(), Y = (int) pf.getImageableY();
      int W = (int) pf.getImageableWidth(), H = (int) pf.getImageableHeight();
      java.awt.geom.Rectangle2D r = fm.getStringBounds("" + pi, g);
       // Cadre noir autour de la partie Imageable...
      g.drawRect(X+1, Y+1, W-2, H-2);
       // impression du numéro de page
       // en rouge et au milieu de la page
      int x = (int) (W - r.getWidth()) / 2;
      int y = (int) ((H - r.getHeight()) / 2);
      g.setColor(Color.red);
      g.drawString("" + pi, X+x, (int)(Y+y+r.getHeight()));
      return PAGE_EXISTS;
   }
}

Lorsque print retourne  NO_SUCH_PAGE l’instance de PrintJob arrête d’appeler la méthode print.

4PrinterJob

La classe PrinterJob permet de créer des jobs d’impression et de les lancer : 

PrinterJob printJob = 
   PrinterJob.getPrinterJob();
//le dialogue d’impression du système
if (printJob.printDialog()){ 
  if (pageFormat == null) 
    pageFormat = printJob.defaultPage();
  printJob.setPrintable(
    l’objet Printable, 
    pageFormat);
  try{
       printJob.print()
  }catch (PrinterException e){
       JOptionPane.showMessageDialog(
	   this, e);
  }
}
PrinterJob printJob = 
   PrinterJob.getPrinterJob();
HashPrintRequestAttributeSet prs = 
   new HashPrintRequestAttributeSet();   
printRequestSet.add(DialogTypeSelection.COMMON)
 //le dialogue d’impression de Java
if (printJob.printDialog(prs)){
  PageFormat pageFormat = 
     printJob.getPageFormat(prs);
  printJob.setPrintable(
    l’objet Printable, 
	pageFormat);
  try{
    printJob.print(prs)
  }catch (PrinterException e){
     JOptionPane.showMessageDialog(
	   this, e);
  }
}
dialogue d'impresion natif dialogue d'impression Java

4 1Méthodes de PrinterJob

static PrinterJob getPrinterJob()
Un PrinterJob doit être créé en appelant cette méthode.
void cancel()
Supprime un PrinterJob
PageFormat defaultPage()
Crée un PageFormat par défaut 
PageFormat defaultPage(PageFormat page)
Clone le PageFormat en paramètre.
int getCopies()
Retourne le nombre de copies à imprimer
abstract String getJobName()
Retourne le nom du document à imprimer
abstract String getUserName()
Retourne le “user name”
abstract boolean isCancelled()
Retourne true si le PrinterJob va être supprimé dès que possible.
abstract PageFormat pageDialog (PageFormat page)
PageFormat pageDialog (PrintRequestAttributeSet prs)
Affiche un dialogue de configuration de la page, à partir du PageFormat en paramètre (boîte de dialogue système), ou de l'ensemble d'attributs (boîte de dialogue Java).
abstract void print()
abstract void print(PrintRequestAttributeSet prs)
Imprime.
abstract boolean printDialog()
abstract boolean printDialog(
                 PrintRequestAttributeSet prs)
Affiche un dialogue d’impression. Ce dialogue d'impression est le dialogue natif du système, ou de l'imprimante si la méthode printDialog est appelée sans paramètre. Sinon celà dépend du paramètre prs. Voir PrintRequestAttributeSet.
abstract void setCopies(int copies)
Positionne le nombre de copies à imprimer.
abstract void setJobName(String jobName)
Donne un nom au document à imprimer.
abstract void setPageable( Pageable document )
abstract void setPrintable (Printable p)
abstract void setPrintable (Printable p, PageFormat f)
Affecte au PrinterJob l'objet à imprimer.
abstract PageFormat validatePage(PageFormat page)

5configuration de la page

pageFormat =
    printJob.pageDialog(pageFormat);
HashPrintRequestAttributeSet prs = 
    new HashPrintRequestAttributeSet();
   ...
pageFormat = printJob.pageDialog(prs);
Configuration système de la page
Configuration Java de la page
Configuration système de la page
Configuration Java de la page
description d'une page

Les mesures dans la classe PageFormat sont exprimées en 1/72ème de pouce. Une feuille de format A4 est une feuille de 21/29,7 cm ou 595.27/841.881/72ème de pouce

La zone imprimable d’une feuille est la feuille moins les marges.

La classe PageFormat contient les attributs et méthodes suivantes : 

static int LANDSCAPE
static int PORTRAIT
static int REVERSE_LANDSCAPE

PageFormat()
Crée un PageFormat par défaut, portrait
double getHeight()
Retourne la hauteur , en 1/72ème de pouce, de la page 
double getImageableHeight()
Retourne la hauteur, en 1/72ème de pouce, de la zone imprimable de la page
double getWidth()
Retourne la largeur, en 1/72ème de pouce, de la page
double getImageableWidth()
Retourne la largeur, en 1/72ème de pouce, de la zone imprimable de la page
double getImageableX()
Retourne la coordonnée x du coin haut gauche de la zone imprimable de la page.
double getImageableY()
Retourne la coordonnée y du coin haut gauche de la zone imprimable de la page.
int getOrientation()
Retourne l’orientation de ce PageFormat
void setOrientation(int orientation)
Positionne l’orientation de la page.
double[]getMatrix()
Retourne une matrice de transformation qui traduit l’espace de l’utilisateur ves l’orientation requise pour la page.
Paper getPaper()
La classe Paper décrit les caractéristiques physiques de la feuille.
void setPaper(Paper paper)

6Impression dans un fichier .PS

Pour diriger l'impression d'un Graphics 2D vers un fichier Postscript, on écrira : 

PrinterJob job = PrinterJob.getPrinterJob();
String psMimeType = "application/postscript";
StreamPrintServiceFactory []factories = PrinterJob.lookupStreamPrintServices(psMimeType);
if (factories.length > 0) { 
   try { 
      FileOutputStream outstream = new FileOutputStream(le nom du fichier sortie); 
      StreamPrintService psPrinter = factories[0].getPrintService(outstream); 
      job.setPrintService(psPrinter);
      PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
      job.setPrintable(l'objet Printable);
      job.print(aset);
   }
   catch (FileNotFoundException ex) { } 
   catch (PrinterException ex) {} 
}

7Book

Il est possible d’empiler des documents au sein d’un même job.

Book monLivre = new Book();
   monLivre.append(l’objet Printable, pageFormat);
   monLivre.append(un autre objet Printable, pageFormat);
   printJob.setPageable(monLivre);

Le nombre de pages qui apparaît dans le dialogue d’impression est alors égal au nombre de append effectué dans le livre. Chaque document doit connaître la taille des documents imprimés avant lui, car il reçoit dans le paramètre pi, son numéro de page dans le document entier…

haut de la page