Impression

demonc Messages postés 20 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 17 décembre 2005 - 12 août 2003 à 18:00
Foub12 Messages postés 44 Date d'inscription mardi 9 juillet 2002 Statut Membre Dernière intervention 1 avril 2007 - 5 juil. 2005 à 12:56
Bonjour, je n'arrive pas a imprimer un JTextArea aprs de multiple tentatives. JE ne comprend surement pas le fonctionnement de Printable, ou je ne sais quoi, bref , si un bonne ame povait m'envoyer une exemple d'impression de JTextArea ou tout autre swing ce sera genial. Merci beaucoup

4 réponses

tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009
13 août 2003 à 08:59
Salut!

Voici un petit code qui te permet d'imprimer un Component.

import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

public class PrintUtilities implements Printable {
    /** le composant à imprimer */    
  private Component componentToBePrinted;

  /** imprimer composant
   * @param c le composant
   */  
  public static void printComponent(Component c) {
    new PrintUtilities(c).print();
  }
  
  /** constructeur
   * @param componentToBePrinted compsant à imprimer
   */  
  public PrintUtilities(Component componentToBePrinted) {
    this.componentToBePrinted = componentToBePrinted;
  }
  
  /** print method **/
  public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog())
      try {
        printJob.print();
      } catch(PrinterException pe) {
        System.out.println("Error printing: " + pe);
      }
  }
  
  /** print method
   * @param g graphisme
   * @param pageFormat format
   * @param pageIndex index
   * @return valeur de retour de l'impression
   */

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  /**
   * @param c composant
   */
  
  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}



Tu crée cette classe (ici elle s'appelle PrintUtilities) puis tu lance ton impression à partir de la classe où tu imprime (par exemple derrière un bouton Imprimer) comme ça :

PrintUtilities pu = new PrintUtilities();
pu.print(Composant à imprimer);

le composant à imprimer peut être tout ce qui hérite de Component (un JPanel, JDialog,...)
0
Generalxav87 Messages postés 3 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 14 janvier 2004
14 janv. 2004 à 14:31
J'ai mis le copde suivant pour l'impression mais bma fenetre depasse de la feuille imprimée.
Est -il possible de définir la taille sur la feuille et sa position
public void actionPerformed(ActionEvent e)
{
Properties props = new Properties();

props.put("awt.print.paperSize", "a4");
props.put("awt.print.destination", "printer");


PrintJob pJob = getToolkit().getPrintJob(this,
"Printing_Test", props);
if (pJob != null)
{
Graphics pg = pJob.getGraphics();
printAll(pg);
pg.dispose();
pJob.end();
}
}
0
cs_coucounet Messages postés 83 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 février 2005
14 avril 2004 à 11:19
Pour définir la taille de ta feuille il faut rajouter quelques lignes dans ta classe print():

Paper papier = new Paper();
        double gauche = 10.0 * 72 / 25.4;
        file: //fait une marge de 10 mm (donc 10/25.4 pouces avec un point = 1/72 pouces)
        
        papier.setImageableArea(gauche, 0.0, papier.getWidth() - 2*gauche, papier.getHeight());
        pf.setPaper(papier);
        file:
        printJob.setPrintable(this,pf);


Dans mon cas j'ai fait une marge de coté (gauche et droite de 10 mm, et une marge verticale (haut et bas ) de 0 mm.
Il ne faut pas oublier que tout est spécifié en points et que nous français parlons avec les unités INTERNATIONALES qui sont les millimètres, et que ces *#*! de ricains fonctionnent avec les pouces !!!!

Au final la méthode print() doit être a peut près comme ça :
/** print method **/
    public void print() {
        annuler = false;
        PrinterJob printJob = PrinterJob.getPrinterJob();
        PageFormat pf = printJob.defaultPage();
        
        Paper papier = new Paper();
        double gauche = 10.0 * 72 / 25.4;
        file: //fait une marge de 10 mm (donc 10/25.4 pouces avec un point =1/72 pouces)
        
        papier.setImageableArea(gauche, 0.0, papier.getWidth() - 2*gauche, papier.getHeight());
        pf.setPaper(papier);
        file:
        printJob.setPrintable(this,pf);
        if (printJob.printDialog())
            try {
                 printJob.print();
            } catch(PrinterException pe) {
                 System.out.println("Error printing: " + pe);
            }
        else annuler = true;
    }


Voilà, à plus et bon courage !!!

:question) 8-) 8-) koukounet 8-) 8-) :question)
0
Foub12 Messages postés 44 Date d'inscription mardi 9 juillet 2002 Statut Membre Dernière intervention 1 avril 2007
5 juil. 2005 à 12:56
bonjour,

votre code serait-il fait pour un format Lettre ?

Je l'ai utilisé et quand je veux imprimer le contenu de mon composant JEditorPane, l'impression ne veux pas s'effectuer et le gestionnaire d'impression me dit : "Remplacez le papier par Lettre ou forcez l'impression sur A4"

Que dois-je remplacer dans la classe ci-dessus pour que l'impression fonctionne au format A4 ?

Merci d'avance.
Fabien
0