Bonjour,
cela fait un moment maintenant que j'essaye d'imprimer un JGraph qui est assez gros (dans les 10000 px de large sur 1500 de haut) sur plusieurs pages...
J'utilise le bout de code suivant (récupéré sur le net et remanié un peu selon mon contexte) :
et pour l'appel proprement dit de l'impression :
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 public int print(Graphics g, PageFormat printFormat, int page) { System.out.println(" Methode print du ScrollPane... "); Dimension pSize = this.getPreferredSize(); System.out.println("Graph width = " +pSize.width+ " , height = " +pSize.height); int w = (int) (printFormat.getWidth()); int h = (int) (printFormat.getHeight()); int cols = (int) Math.max(Math.ceil((double) (pSize.width - 5) / (double) w), 1); int rows = (int) Math.max(Math.ceil((double) (pSize.height - 5) / (double) h), 1); System.out.println("Nb pages = " +(cols * rows)); if (page < cols * rows) { // Configures graph for printing RepaintManager currentManager = RepaintManager.currentManager(this); currentManager.setDoubleBufferingEnabled(false); //double oldScale = getGraph().getScale(); //getGraph().setScale(1 / pageScale); int dx = (int) ((page % cols) * printFormat.getWidth()); int dy = (int) ((page % rows) * printFormat.getHeight()); g.translate(-dx, -dy); g.setClip(dx, dy, (int) (dx + printFormat.getWidth()),(int) (dy + printFormat.getHeight())); System.out.println("Coor Clip = " +dx+ " ,"+dy+ " ,"+ (int) (dx + printFormat.getWidth())+ " ,"+(int) (dy + printFormat.getHeight())+ " ,"); //g.setClip(1, 1, 10000,500); // Prints the graph on the graphics. System.out.println("Printing page " +page); paint(g); // Restores graph g.translate(dx, dy); //graph.setScale(oldScale); currentManager.setDoubleBufferingEnabled(true); return PAGE_EXISTS; } else { return NO_SUCH_PAGE; } }
Le résultat est tjs le même qqe soient les modifs apportées à mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setPrintable(scrollPaneCollabGraph); if (printJob.printDialog()) { try { printJob.print(); } catch (Exception e) { } }
je n'obtiens en fait qu'une seule page imprimée qui comporte la partie du JGraph affichée dans mon browser!
Pourtant via les traces que j'ai mises j'obtiens le résultat suivant dans ma console (Applet) (pour une tentative d'impression de 2 pages) :
===== Impression du graphe !... =====
Methode print du ScrollPane...
Graph width = 9703 , height = 1248
Nb pages = 36
Coor Clip = 0 ,0 ,841 ,595 ,
Printing page 0
Methode print du ScrollPane...
Graph width = 9703 , height = 1248
Nb pages = 36
Coor Clip = 841 ,595 ,1682 ,1190 ,
Printing page 1
La hauteur et largeur totale du graphe semblent bonnes...
il y aurait donc au total 36 pages à imprimer ce qui semble possible...
les coordonnées du Clip semblent évoluer correctement...
Mais impossible d'obtenir autre chose à l'impression qu'une seule et même unique page qui reflète non pas le graphe à partir des coord.
0 ,0 ,841 ,595
puis
841 ,595 ,1682 ,1190
etc...
Mais donc la partie actuelle du graphe affichée dans mon browser (selon l'endroit où je me positionne dans le scrolling...)
Si qq'un a une idée de là où ça coince, je suis preneur!!!
Un grand merci d'avance pour vous pencher sur mon pb...
Stéphane
[Modéré par Wichtounet]
Merci d'utiliser les balises [CODE]
les règles du forum
Partager