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.