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

AWT/Swing Java Discussion :

problème d'impression


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par défaut problème d'impression
    bonjour,

    alors j'ai un petit problème d'impression, je dois pouvoir imprimer un page html affiché dans un JEditorPane, et qd j'imprime le redimensionnement de la page ne se fait pas, je n'ai aussi que la premiere page.

    Alors j'ai crée une classe PrintUtils à la quel je passe mon JscollPane à Imprimer:

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    package com.ares.arpmsi.client.common.utils;
     
    import java.awt.*;
    import java.awt.print.*;
     
    import javax.swing.*;
     
     
    /**
     *
     * @author
     * @version 1.0
     */
    public class PrintUtils implements Printable {
        /** le composant à imprimer */
        private Component componentToBePrinted;
     
        /** constructeur
        * @param componentToBePrinted compsant à imprimer
        */
        public PrintUtils(Component componentToBePrinted) {
            this.componentToBePrinted = componentToBePrinted;
        }
     
        /** imprimer composant
        * @param c le composant
        */
        public static void printComponent(Component c) {
            new PrintUtils(c).print();
        }
     
        /** print method **/
     
     
        public void print() {
            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);
                }
            }
        }
     
        /** 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);
        }
    }
    j'vois pas trop comment faire pour redimmensionner la page et aussi comment faire pour avoir une impression multipage!

    merci de votre aide!!

    @++ Dav

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Par défaut
    Pour imprimer toutes les pages, il te faut récupérer le nombre de pages à imprimer par exemple avec une méthode int nbPg(..) dans ton "componentToBePrinted"
    et ensuite tu remplaces:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            if (pageIndex > 0) { 
                return (NO_SUCH_PAGE); 
            } else { ...
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            if (pageIndex < componentToBePrinted.nbPg(..)) { 
                return (NO_SUCH_PAGE); 
            } else { ...
    et dans le else tu fais dépendre ta translation de pageIndex par qq chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()+pageIndex*pageFormat.getImageableHeight());
    La méthode componentToBePrinted.nbPg(..) est une division de la longueur du document par pageFormat.getImageableHeight()
    D'ailleurs, il peut être intéressant d'envoyer l'entier pageFormat.getImageableHeight() en argument de nbPg(!!!


    Cyrille.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par défaut
    Citation Envoyé par cycharrier
    Pour imprimer toutes les pages, il te faut récupérer le nombre de pages à imprimer par exemple avec une méthode int nbPg(..) dans ton "componentToBePrinted"
    et ensuite tu remplaces:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            if (pageIndex > 0) { 
                return (NO_SUCH_PAGE); 
            } else { ...
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            if (pageIndex < componentToBePrinted.nbPg(..)) { 
                return (NO_SUCH_PAGE); 
            } else { ...
    et dans le else tu fais dépendre ta translation de pageIndex par qq chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
                g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()+pageIndex*pageFormat.getImageableHeight());
    La méthode componentToBePrinted.nbPg(..) est une division de la longueur du document par pageFormat.getImageableHeight()
    D'ailleurs, il peut être intéressant d'envoyer l'entier pageFormat.getImageableHeight() en argument de nbPg(!!!


    Cyrille.

    merci pour ta réponse, ça commence à prendre forme....

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par défaut
    bon mon code est devenu ça :

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    package com.ares.arpmsi.client.common.utils;
     
    import java.awt.*;
    import java.awt.print.*;
     
    import javax.swing.*;
     
     
    /**
     *
     * @author  * @version 1.0
     */
    public class PrintUtils implements Printable {
        /** le composant à imprimer */
        private Component componentToBePrinted;
     
        /** constructeur
        * @param componentToBePrinted compsant à imprimer
        */
        public PrintUtils(Component componentToBePrinted) {
            this.componentToBePrinted = componentToBePrinted;
        }
     
        /** imprimer composant
        * @param c le composant
        */
        public static void printComponent(Component c) {
            new PrintUtils(c).print();
        }
     
        /** print method **/
        public void print() {
            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);
                }
            }
        }
     
        /** 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) {
            System.out.println("nb" + nbPg(componentToBePrinted, pageFormat));
     
            if (pageIndex >= nbPg(componentToBePrinted, pageFormat)) {
                return (NO_SUCH_PAGE);
            } else {
                Graphics2D g2d = (Graphics2D) g;
                g2d.translate(pageFormat.getImageableX(),
                    pageFormat.getImageableY() +
                    (pageIndex * pageFormat.getImageableHeight()));
     
                double scale = pageFormat.getImageableWidth() / componentToBePrinted.getWidth();
     
                g2d.scale(scale, scale);
                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);
        }
     
        public int nbPg(Component comp, PageFormat pgFormat) {
            int nbPages = 0;
     
            double heightDoc = (double) comp.getHeight();
            double heightPg = pgFormat.getImageableHeight();
     
            double dblNb = heightDoc / heightPg;
     
            nbPages = (int) dblNb;
     
            return nbPages;
        }
    }
    le seul truc c'est qu'il m'imprime effectivement 2 pages mais la seconde est blanche.....

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Par défaut
    Je me suis trompé de sens dans la translation c'est un "-"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pageFormat.getImageableY() - 
                    (pageIndex * pageFormat.getImageableHeight()));
    enfin, je crois que la page blanche vient de là!!

    Cyrille

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Par défaut
    Pour le nombre de pages, il me semble qu'il faut ajouter 1
    (car il faut 3 pages pour en imprimer 2.2 )

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par défaut
    Citation Envoyé par cycharrier
    Je me suis trompé de sens dans la translation c'est un "-"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pageFormat.getImageableY() - 
                    (pageIndex * pageFormat.getImageableHeight()));
    enfin, je crois que la page blanche vient de là!!

    Cyrille

    bon ben c'etait bien ça!!

    merci

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

Discussions similaires

  1. Problème d'impression de caractère (gras) sur matricielle
    Par Tiefolo Salia dans le forum Langage
    Réponses: 1
    Dernier message: 01/09/2005, 23h36
  2. [PowerBuilder] Problème d'impression datawindow composite
    Par jpdar dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 17/05/2005, 13h33
  3. Réponses: 16
    Dernier message: 17/03/2005, 13h54
  4. [Rave] problème d'impression
    Par romstarr dans le forum Rave
    Réponses: 2
    Dernier message: 09/06/2004, 15h48
  5. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37

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