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

avec Java Discussion :

Imprimer un conteneur deux fois


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de savageman86
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Par défaut Imprimer un conteneur deux fois
    Bonjour,

    Je souhaiterais imprimer 2 fois le même conteneur panelImpression l'un en dessous de l'autre !

    J'ai pour l'instant ceci, recopié de la FAQ (ça fonctionne très bien, mais n'imprime qu'une seule fois) :
    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
        PrintJob job = getToolkit().getPrintJob(new JFrame(), "Impression", null);
        if (job != null) {
                /** Recupere le Graphics dans lequel on va ecrire */
                Graphics g = job.getGraphics();
                if (g != null) {
                        panelImpression.setVisible(true);
                        /** Sur le Container imprime l'ensemble de ses Components  */
                        panelImpression.printAll(g);
                        // AJOUT ICI
                        g.dispose();
                } 
                /** Finit le travail  */
                job.end();
                panelImpression.setVisible(false);
        }
    J'ai trouvé la fonction copyArea() de Graphics qui a l'air sympatoche, donc j'ai essayé de rajouter ceci à l'endroit indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.copyArea(0, 0, 210, 90, 0, 90);
    Cependant, j'ai l'erreur suivante :
    Exception in thread "AWT-EventQueue-0" java.lang.InternalError: transformed copyArea not implemented yet
    at sun.java2d.SunGraphics2D.doCopyArea(SunGraphics2D.java:1999)
    at sun.java2d.SunGraphics2D.copyArea(SunGraphics2D.java:1977)
    at sun.print.ProxyGraphics2D.copyArea(ProxyGraphics2D.java:418)
    at sun.print.ProxyGraphics.copyArea(ProxyGraphics.java:344)
    at uem.aic.PanelGestionRegimes.bImprimerActionPerformed(PanelGestionRegimes.java:1214)
    Quelqu'un connait-il une solution qui fonctionne ?

    D'avance merci à vous.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Je crois que le message d'erreur est suffisament explicite : cette fonctionnalité n'est pas implémentée sur cette JVM/OS.

    Crées-toi donc ton propre Printable qui se chargera de dessiner 2 fois le panel sur la même page et passe par PrinterJob (au lieu de PrintJob).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé
    Avatar de savageman86
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Par défaut
    Salut,

    Merci beaucoup à toi pour cette première étape ! J'ai réussi à utiliser PrinterJob et l'interface Printable, mais je n'arrive toujours pas à imprimer en double sur la même page (l'un en dessous de l'autre).

    Voici l'action du clic sur le bouton (fonctionne cool) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrintable(this);
        boolean doPrint = job.printDialog();
     
        if (doPrint)
        {
            try {
                job.print();
            } catch (PrinterException ex) {
                Logger.getLogger(PanelGestionRegimes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    Et la méthode print() de l'interface Printable (c'est sans doute là qu'il faut dessiner le Panel une 2ème fois, mais je n'y arrive pas...).

    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
        @Override
       public int print(Graphics g, PageFormat pf, int page) throws
                                                        PrinterException {
            if (page > 0) {
                return NO_SUCH_PAGE;
            }
     
            Graphics2D g2d = (Graphics2D)g;
            /* Print the entire visible contents of a java.awt.Frame */
            g2d.translate(pf.getImageableX(), pf.getImageableY());
            panelImpression.printAll(g);
     
            /* Print the entire visible contents of a java.awt.Frame */
            g2d.translate(0, pf.getImageableY()/3);
            panelImpression.printAll(g);
     
            return PAGE_EXISTS;
        }
    J'ai essayé avec pleins de trucs dans le 2e g2d.translate() (valeurs positives, négatives sur X et Y), mais ça ne me dessine toujours qu'une seule fois le truc... Le /3 s'explique par le fait que ce que je dessine prend 1 tiers de la feuille...

  4. #4
    Membre confirmé
    Avatar de savageman86
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Par défaut
    J'ai finalement réussi. Le problème est que pf.getImageableY() ne renvoit pas la taille de la page... Mais une valeur bien inférieure (12, contre plus de 800), donc c'était peut-être en double, mais à 2 pixels de décalage on ne voit rien...

    Voici la bonne stratégie !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Graphics2D g2d = (Graphics2D)g;
     
            /* Print the entire visible contents of a java.awt.Frame */
            panelImpression.printAll(g);
     
            /* Print the entire visible contents of a java.awt.Frame */
            /* On décale d'un peu moins d'un tiers de page */
            /* g2d.getClip().getBounds2D().getHeight() = hauteur de la page */
            g2d.translate(0, g2d.getClip().getBounds2D().getHeight() * 0.28);
            panelImpression.printAll(g);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/05/2015, 10h18
  2. [AC-2007] Ne pas imprimer deux fois la même chose
    Par Flup dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 24/11/2009, 20h47
  3. Problème pour imprimer deux fois
    Par jodan33 dans le forum Débuter
    Réponses: 6
    Dernier message: 07/04/2008, 15h52
  4. Réponses: 14
    Dernier message: 30/03/2005, 21h50
  5. Sélectionner un même enregistrement deux fois...
    Par Manu0086 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/02/2004, 13h09

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