Bonjour,
A partir d'un exemple que j'ai trouvé sur le NET, j'ai adapté la classe PrintUtilities pour imprimer des objets graphiques. L'impression marche bien, mais par contre, je n'obtiens qu'un partie de ma JFrame car sa taille est trop grande pour le format A4 de l'imprimante.
Je recherche une partie de code que je pourrais ajouter pour réduire la taille avant d'imprimer. J'ai essayé d'utiliser un BufferedImage et de le réduire puis de recréer un Graphics2D, mais cela ne marche pas (j'imprime une page blanche).
Ci-dessous se trouve le code de la classe PrintUtilities qui est appelée de la façon suivante :
Merci d'avance pour toutes suggestions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private void imprimer() { PrintUtilities pu = new PrintUtilities(this.getRootPane()); pu.setOrientation(PrintUtilities.PAYSAGE); pu.setShowDialog(true); pu.print(); }
Gérard
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 package gegeutil; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.RepaintManager; public class PrintUtilities implements Printable { private final Component componentToBePrinted; public static final int PORTRAIT = PageFormat.PORTRAIT, PAYSAGE = PageFormat.LANDSCAPE; private boolean showDialog = true; public int orientation = 0; public static void printComponent(Component c) { new PrintUtilities(c).print(); } public PrintUtilities(Component componentToBePrinted) { this.componentToBePrinted = componentToBePrinted; } public void print() { PrinterJob printJob = PrinterJob.getPrinterJob(); PageFormat pf = new PageFormat(); if (orientation == PORTRAIT) pf.setOrientation(PageFormat.PORTRAIT); else pf.setOrientation(PageFormat.LANDSCAPE); printJob.setPrintable(this,pf); try { if (!showDialog) printJob.print(); else if ( printJob.printDialog()) printJob.print(); } catch(PrinterException pe) {System.out.println("Error d'impression: " + pe);} } public int print(Graphics g, PageFormat pageFormat, int pageIndex) { Graphics2D g2d = (Graphics2D)g; if (pageIndex > 0) {return(NO_SUCH_PAGE);} 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); } public static void enableDoubleBuffering(Component c) { RepaintManager currentManager = RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(true); } public void setShowDialog(boolean b) { showDialog = b;} public void setOrientation(int o) { orientation = o;} }
Partager