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

2D Java Discussion :

[PrinterJob][Graphics2D] Multi pages


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut [PrinterJob][Graphics2D] Multi pages
    Bonjour,

    Je cherche à imprimer un Graphics2D qui est assez long sur plusieurs pages. J'ai donc farfouiller sur les topics qui en parlent (http://www.developpez.net/forums/d10...primer-jtable/, http://www.developpez.net/forums/d23...ob-graphics2d/ et http://www.developpez.net/forums/showthread.php?t=53139) mais je n'arrive pas à les adapter à mon code. Mon problème c'est que la première page marche nikel mais les autres moins .

    Quelqu'un pourrait me corriger l'erreur que je n'aurais pas remarqué ? Voici mon code :

    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
    @Override public int print(Graphics g, PageFormat pf, int index_page) {
        int htext = (int)g.getFontMetrics().getStringBounds("", g).getHeight();
        int zone_imprimable = (int)(Math.ceil(pf.getImageableHeight())-15-htext);
     
        // Calculer le nombre de page à imprimer
        nb_page = Math.max (1, ((nb_ligne*ht)/zone_imprimable));
     
        if (index_page >= nb_page) return NO_SUCH_PAGE;
     
        Graphics2D g2d = (Graphics2D)g;
     
        //Définir la hauteur du graphique sur une page
        Dimension dim  = new Dimension(790, (int)Math.ceil(pf.getImageableHeight()));
     
        // Positonne le graphique à l'origine de la zone d'impression
        g2d.translate((int)pf.getImageableX()+30, (int)pf.getImageableY());
     
        // Dimension de la page
        double pageWidth = pf.getImageableWidth(); //page width
        double pageHeight = pf.getImageableHeight(); // Page height
     
        // Redimensionner en largeur si trop grand
        if (dim.width > pageWidth) {
            double factor = pageWidth/dim.width; // Echelle de redimensionnement
            g2d.scale(factor, factor); // Redimensionner le graphique
            pageWidth /= factor; // Modifier la taille du graphique
            pageHeight /= factor;
        }
        // Centrer le graphique sur la page
        g2d.translate((pageWidth-dim.width)/2,(pageHeight-dim.height)/2);
     
        // Découpe le graphique en fonction de la page courante
        if (nb_page>1){
           	g2d.setClip(0, zone_imprimable*index_page, 790, zone_imprimable);
        }
     
        dessinerEdt(g2d, dim);
     
        return PAGE_EXISTS;
    }
    PS : "nb_ligne" est le nombre de ligne que comprends mon tableau et "ht" la hauteur d'une ligne.

    Encore merci pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Personne ne peut m'aider ?

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    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 904
    Billets dans le blog
    54
    Par défaut
    d'ou vient nb_page et comment est-il calcule, que vaut-il lors d'une execution ?
    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

  4. #4
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Tout d'abord merci pour ta réponse mais je ne vois pas ce que je peux rajouter comme données pour répondre à ta question alors je remet en évidence les parties importantes de mon précédent post en simplifiant un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        int zone_imprimable = (int)pf.getImageableHeight();
     
        // Calculer le nombre de page à imprimer
        nb_page = (nb_ligne*ht)/zone_imprimable;
    PS : "nb_ligne" est le nombre de ligne que comprends mon tableau et "ht" la hauteur d'une ligne.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    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 904
    Billets dans le blog
    54
    Par défaut
    Oui mais quelle est sa valeur lors de l'execution ?

    Et sinon pour avoir de l'aide plus rapidement, le plus simple est de mettre en place un code de test unitaire avec un jeu de donnees bidon simples pour que tout un chacun puisse directement l'executer et le tester sur son propre PC plutot que de penser que les gens vont passer des heures et des heures a re-coder un exemple -surtout quand il s'agit de GUI ou de graphisme- (qui sera au final digferent de ton code et donc potentiellement sans ton probleme).
    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

  6. #6
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut Code exemple simplifié
    Ok voilà le code exemple simplifié :

    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
    @Override public int print(Graphics g, PageFormat pf, int index_page) {        
        // Calculer le nombre de page à imprimer
        nb_page = 3; // (int)1980/532
     
        if (index_page >= nb_page) return NO_SUCH_PAGE;
     
        Graphics2D g2d = (Graphics2D)g;
     
        //Définir la hauteur du graphique sur une page
        Dimension dim  = new Dimension(790, (int)pf.getImageableHeight());
     
        // Positonne le graphique à l'origine de la zone d'impression
        g2d.translate((int)pf.getImageableX()+30, (int)pf.getImageableY());
     
        // Dimension de la page
        double pageWidth = pf.getImageableWidth(); //page width
        double pageHeight = pf.getImageableHeight(); // Page height
     
        // Redimensionner en largeur si trop grand
        if (dim.width > pageWidth) {
            double factor = pageWidth/dim.width; // Echelle de redimensionnement
            g2d.scale(factor, factor); // Redimensionner le graphique
            pageWidth /= factor; // Modifier la taille du graphique
            pageHeight /= factor;
        }
        // Centrer le graphique sur la page
        g2d.translate((pageWidth-dim.width)/2,(pageHeight-dim.height)/2);
     
        // Découpe le graphique en fonction de la page courante
        if (nb_page>1){
           	g2d.setClip(0, 532*index_page, 790, 532);
        }
     
        g2d.fillRect(0, 0, dim.width, 1980);
     
        return PAGE_EXISTS;
    }
    Images attachées Images attachées    

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    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 904
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par bouye Voir le message
    Et sinon pour avoir de l'aide plus rapidement, le plus simple est de mettre en place un code de test unitaire avec un jeu de donnees bidon simples pour que tout un chacun puisse directement l'executer et le tester sur son propre PC plutot que de penser que les gens vont passer des heures et des heures a re-coder un exemple -surtout quand il s'agit de GUI ou de graphisme- (qui sera au final digferent de ton code et donc potentiellement sans ton probleme).
    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

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

Discussions similaires

  1. [VB] Conseil - Multi page / Multi Tab etc ...
    Par Ooly2001 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/01/2006, 19h56
  2. [Debutant]Multi page sous sql serveur
    Par christophebmx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/11/2004, 17h23

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