IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

Imprimer un JFrame


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut Imprimer un JFrame
    Bonjour,

    A partir d'un exemple que j'ai trouvé sur le NET, j'ai adapté la classe PrintUtilities pour imprimer des objets graphiques. L'impression marche bien, mais par contre, je n'obtiens qu'un partie de ma JFrame car sa taille est trop grande pour le format A4 de l'imprimante.

    Je recherche une partie de code que je pourrais ajouter pour réduire la taille avant d'imprimer. J'ai essayé d'utiliser un BufferedImage et de le réduire puis de recréer un Graphics2D, mais cela ne marche pas (j'imprime une page blanche).

    Ci-dessous se trouve le code de la classe PrintUtilities qui est appelée de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void imprimer()
    {
    	PrintUtilities pu = new PrintUtilities(this.getRootPane());
    	pu.setOrientation(PrintUtilities.PAYSAGE);
    	pu.setShowDialog(true);
    	pu.print();
    }
    Merci d'avance pour toutes suggestions.

    Gérard


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    package gegeutil;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
     
    import javax.swing.RepaintManager;
     
    public class PrintUtilities implements Printable {
      private final Component componentToBePrinted;
      public  static final int 	PORTRAIT = PageFormat.PORTRAIT, 
                         		PAYSAGE  = PageFormat.LANDSCAPE; 
      private boolean showDialog = true;
      public int orientation = 0; 
      public static void printComponent(Component c) {
        new PrintUtilities(c).print();
      }
     
      public PrintUtilities(Component componentToBePrinted) {
        this.componentToBePrinted = componentToBePrinted;
      }
     
     
     
      public void print() {
        PrinterJob printJob = PrinterJob.getPrinterJob();
        PageFormat pf = new PageFormat();
     
        if (orientation == PORTRAIT) pf.setOrientation(PageFormat.PORTRAIT);
        else pf.setOrientation(PageFormat.LANDSCAPE);
        printJob.setPrintable(this,pf);
        try 
    	{
        	if (!showDialog)     printJob.print();
        	else  if ( printJob.printDialog())   printJob.print();
    	} 
    	catch(PrinterException pe) {System.out.println("Error d'impression: " + pe);}
      }
     
      public int print(Graphics g, PageFormat pageFormat, int pageIndex) 
      {
    	 Graphics2D g2d = (Graphics2D)g;
         if (pageIndex > 0) {return(NO_SUCH_PAGE);}
          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);
      }
     
      public static void enableDoubleBuffering(Component c) {
        RepaintManager currentManager = RepaintManager.currentManager(c);
        currentManager.setDoubleBufferingEnabled(true);
      }
     
      public void setShowDialog(boolean b)  { showDialog = b;}
     
      public void setOrientation(int o)  { orientation = o;}
    }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    J'avais eu un problème similaire il y'a peu, si ce n'est que ca fonctionnait.

    Je convertissait le contenu de ma Jframe en BufferedImage, je la rescalais (en connaissant la dimension en pixel d'une A4) puis je l'imprimais et ca fonctionnait. Après ce n'est peut être pas la meilleur solution...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    Citation Envoyé par wax78 Voir le message
    J'avais eu un problème similaire il y'a peu, si ce n'est que ca fonctionnait.

    Je convertissait le contenu de ma Jframe en BufferedImage, je la rescalais (en connaissant la dimension en pixel d'une A4) puis je l'imprimais et ca fonctionnait. Après ce n'est peut être pas la meilleur solution...
    Merci pour la réponse. As-tu conservé la partie de code correspondante ? Sans doute ai-je fait des erreurs de coding. Je pourrai ainsi comparer.
    Voici le code que j'ai modifié pour réduire l'image, mais j'obtiens une page blanche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public int print(Graphics g, PageFormat pageFormat, int pageIndex) 
      {
         if (pageIndex > 0) {return(NO_SUCH_PAGE);}  // seulement une page
     
    int printX = 597, printY = 842;
    BufferedImage scaledImage = new BufferedImage(printerX, printerY, BufferedImage.TYPE_INT_RGB);
     BufferedImage imageCourante = new BufferedImage(componentToBePrinted.getWidth(),componentToBePrinted.getHeight(),BufferedImage.TYPE_INT_RGB);
     
    Graphics2D graphics2D = scaledImage.createGraphics();
    graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    graphics2D.drawImage(imageCourante, 0, 0, printerX, printerY, null);
     
    graphics2D.translate( printerX, printerY);
    disableDoubleBuffering(componentToBePrinted);
    componentToBePrinted.paint(graphics2D);
    enableDoubleBuffering(componentToBePrinted);
    return(PAGE_EXISTS);
     
      }
    Merci encore.

    Gérard

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Bah tu parles de quel code ? Celui pour imprimer une bufferedimage ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void printImage(BufferedImage image) {
     
    	  JLabel jb = new JLabel();
    		ImageIcon ic = new ImageIcon(image);
    		jb.setIcon(ic);
    		jb.setSize(image.getWidth(),image.getHeight());
    		printComponent(jb);
    	}
    Ou celui avant qui redimensionne ? Avec la taille a 4 et la formule et les mesures en pixel ? (parce que ca jsais plus dans quel projet ca se trouve )
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Bah tu parles de quel code ? Celui pour imprimer une bufferedimage ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void printImage(BufferedImage image) {
     
    	  JLabel jb = new JLabel();
    		ImageIcon ic = new ImageIcon(image);
    		jb.setIcon(ic);
    		jb.setSize(image.getWidth(),image.getHeight());
    		printComponent(jb);
    	}
    Ou celui avant qui redimensionne ? Avec la taille a 4 et la formule et les mesures en pixel ? (parce que ca jsais plus dans quel projet ca se trouve ) Oui c'est bien de cela dont je veux parler. Merci encore

Discussions similaires

  1. Imprimer un JFrame contenant un objet JFreeChart
    Par luffywallis dans le forum 2D
    Réponses: 1
    Dernier message: 16/09/2017, 16h29
  2. Imprimer le contenu d'une JFrame
    Par haksasse dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 08/05/2008, 16h40
  3. Imprimer une JFrame
    Par argon dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/04/2007, 11h58
  4. [Print]Comment imprimer le texte d'une Jframe???
    Par greg3105 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/04/2005, 19h47
  5. Comment imprimer le contenu d'un TStringGrid
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo