j'ai un composite qui contient un TableViewer et je voudrais imprimer ce composite mais ce TableViewer est un peut lagre donc je dois aussi config la largeur.
merci d'avance
j'ai un composite qui contient un TableViewer et je voudrais imprimer ce composite mais ce TableViewer est un peut lagre donc je dois aussi config la largeur.
merci d'avance
Je viens de faire le tour, je pense qu'il n'existe pas de solution pour imprimer les composant SWT. Car si un composant n'est pas visible entièrement sur un écran (avec scrollbars) on ne peut utiliser le GC.
J'aurais dû utiliser Swing. Maintenant je dois recréer un JTable à partir de mon TableViewer. c'est la vie.
Une question bête les tableaux généralement doivent-ils être imprimable? Parce qu'on a pas pensé à intégrer l'impression dans SWT comme dans Swing?
Salut,
SWT intègre très bien l'impression. Seulement, cela est fait d'une manière différente de Swing. Tu peux passer par la classe Printer (qui va te servir pour ton impression à proprement parler).
Une autre classe intéressante est la classe PrinterDialog. Tu l'utilises en faisant:
Le PrinterData va te servir à paramétrer ton Printer (entre autre l'imprimante à utiliser, si tu veux imprimer en paysage ou en portrait...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PrintDialog dialog = new PrintDialog(shell); PrinterData data = dialog.open();
Ensuite, tu définis ton printer:
où myComposite est le Composite contenant ton TableViewer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Printer myPrinter = new Printer(data); myPrinter.startJob("Print"); myPrinter.startPage(); GC gc = new GC(printer); myComposite.print(gc); myPrinter.endPage(); myPrinter.endJob();
Tu as un snippet sur le site SWT.
Voilà, à+
Gueritarish
je vais tout de suite essayer merci pour le soutien.
En effet j'ai essayé ce que vous m'avez dit mais je ne sais pas comment créer la variable Printer, j'ai fais comme suit mais j'ai une page vide qui est imprimée.
où "body" est le composant contenant ma TableViewer et le "parentShell" est le Shell qui contient body.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 PrintDialog dialog = new PrintDialog(parentShell); dialog.getStartPage(); PrinterData data = dialog.open(); Printer myPrinter = new Printer(data); myPrinter.startJob("Print"); myPrinter.startPage(); GC printer1 = new GC (myPrinter); //GC gc = new GC(printer); body.print(printer1); myPrinter.endPage(); myPrinter.endJob();
Malheureusement, j'ai toujours une page vide qui est imprimée.
Je voulais vous dire aussi que j'ai utilisé un autre code pour imprimer tout le Shell et ça ne marche pas j'ai un tout petit rectangle qui est imprimé qui contient mon Shell et une partie de mon font d'écran du bureau. le code que j'ai utiliser pour imprimer mon Shell est celui-ci.
Je n'ai jamais travaillé avec les GC donc si vous avez des cours là dessus, n'hésitez pas. Pour terminer la solution qui marche c'est de créer une JTable à partir de mon TableViewer et ensuite de créer un JPanel en arrière plans et d'y mettre ma JTable mais c'est trop null. Je le sais.
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 PrinterData data = Printer.getDefaultPrinterData(); if (data == null) { System.out.println("Warning: No default printer."); d.dispose(); return; } Printer printer = new Printer(data); if (printer.startJob("SWT Printing Snippet")) { Color black = printer.getSystemColor(SWT.COLOR_BLACK); Color white = printer.getSystemColor(SWT.COLOR_WHITE); Rectangle trim = printer.computeTrim(0, 0, 0, 0); Point dpi = printer.getDPI(); int leftMargin = dpi.x + trim.x; // one inch from left side of paper if (leftMargin < 0) leftMargin = -trim.x; // make sure to print on the printable area int topMargin = dpi.y / 2 + trim.y; // one-half inch from top edge of paper if (topMargin < 0) topMargin = -trim.y; // make sure to print on the printable area GC gcPrint = new GC(printer); if (printer.startPage()) { gcPrint.setBackground(white); gcPrint.setForeground(black); GC gc = new GC(d); final Image image = new Image(d, d.getBounds()); gc.copyArea(image, 0, 0); gcPrint.drawImage(image, leftMargin, topMargin); printer.endPage(); } gcPrint.dispose(); printer.endJob(); } printer.dispose();
Merci d'avance pour vos indications.
Salut,
Alors, j'ai lu dans la FAQ SWT qu'il fallait d'abord faire une image du contrôle que l'on voulait afficher (sinon, il prend la résolution du Display affiché à l'écran qui peut être différente de celle que l'on veut utiliser).
Donc, ce code est plus "pertinent" que le précédent:
où pShell est me Shell contenant l'affichage, et pControlToPrint le Control à 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 // On récupère les informations d'impression: PrintDialog dialog = new PrintDialog(pShell); PrinterData data = dialog.open(); // On définit une image du controle à imprimer: Point size = pControlToPrint.getSize(); Image printImage = new Image(pShell.getDisplay(), size.x, size.y); GC gcControl = new GC(pControlToPrint); gcControl.copyArea(printImage, 0, 0); Printer printer = new Printer(data); ImageData imageData = printImage.getImageData(); Rectangle trim = printer.computeTrim(0, 0, 0, 0); Point printerDPI = printer.getDPI(); Point displayDPI = pShell.getDisplay().getDPI(); // On calcule le facteur d'agrandissement à appliquer à l'impression: int scaleFactor = printerDPI.x / displayDPI.x; printer.startJob("Print"); printer.startPage(); // On va "peindre" l'image retaillée dans notre objet Printer: Image printedImage = new Image(printer, imageData); GC gcPrinter = new GC(printer); gcPrinter.drawImage(printedImage, 0, 0, imageData.width, imageData.height, -trim.x, -trim.y, scaleFactor * imageData.width, scaleFactor * imageData.height); printer.endPage(); printer.endJob(); // On libère les ressources utilisées: printer.dispose(); gcPrinter.dispose(); gcControl.dispose(); printImage.dispose(); printedImage.dispose();
Sinon, tu as un article sur la classe GC (Graphic Context).
Voilà, à+
Gueritarish
Partager