L'impression en java

tanalook Messages postés 20 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 18 décembre 2012 - 24 oct. 2011 à 12:00
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 10 nov. 2011 à 16:27
Bonjour,
J'ai une classe fencarte contenant des boutons(enregistrer,modifier,supprimer) et imprimer permettant d'imprimé la fenêtre.J'ai cette code ci-dessous met la fenetre ne s'imprime pas c'est une page vierge qui va sortir.Je voudrais que la fenêtre s'imprimer.J'ai vraiment besoin d'un coup de main.
merci et bonne journée
Voici la méthode imprimé


public void ImprimerCarte(){
Properties props = new Properties();

props.setProperty("awt.print.paperSize", "a4");
props.setProperty("awt.print.destination", "printer");
PrintJob demandeDImpression = getToolkit().getPrintJob(fenetre, "Impression", props);
// Récupère un PrinterJob
if (demandeDImpression != null) {
Graphics gImpr = demandeDImpression.getGraphics();
if (bImprimer.isSelected())
new FenCarte().printAll(gImpr);
gImpr.dispose();
demandeDImpression.end();

}
}
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
// TODO Auto-generated method stub

final Container container = fenetre.getContentPane();
final Dimension dim = container.getSize();
final double scaleX = pageFormat.getImageableWidth() / dim.width;
final double scaleY = pageFormat.getImageableHeight() / dim.height;
final double scale = Math.min(scaleX, scaleY);
final Graphics2D g2D = (Graphics2D)graphics;
g2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2D.scale(scale, scale);
container.print(g2D);
return PAGE_EXISTS;
}


}

10 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
8 nov. 2011 à 09:59
Bonjour,

Pour imprimer la fenêtre toute entière sans modification tu peux enregistrer une image sur ton bureau (par exemple) et l'imprimer.

Voilà un code qui te permet de le faire :
public void enregistrerImage() {
BufferedImage image = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);

Graphics2D g2d = image.createGraphics();

if(!isOpaque()){
Color bg = getBackground();
bg = (bg.getAlpha() < 255) ? new Color(bg.getRed(), bg.getGreen(), bg.getBlue()) : bg;

Color color = g2d.getColor();
g2d.setColor(bg);
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setColor(color);
}
paint(g2d);
g2d.dispose();
try {
ImageIO.write(image, "jpeg", new File("C:\\Documents and Settings\\K0B6QU\\Bureau\\image.jpg"));
} catch (IOException e) {      
e.printStackTrace();
} 
}
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
8 nov. 2011 à 12:03
Salut ;o)

pour le ImageIO.write ;o) utilise plutot la propriété systeme : System.getProperty("user.home") ou meme user.dir qui indique le répertoire courant ;o)
ca évite de mettre un chemin en dur ;o) (cause de pas mal de soucis) ;o)


GodConan ;o)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
8 nov. 2011 à 13:09
Oui, c'est vrai que là, le chemin est à modifier, mais c'est juste un exemple.

Pense également au JFileChooser dans ce cas.
0
tanalook Messages postés 20 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 18 décembre 2012
10 nov. 2011 à 08:59
Bonjour,
Je veux imprimer toute la fenêtre (c'est à dire l'interface JFrame) à partir de son bouton imprimé pas une image.

Merci d'avance
et bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
10 nov. 2011 à 09:04
ben !! la fenetre ou une image de la fenetre !! c est la meme chose non?

GodConan ;o)
0
tanalook Messages postés 20 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 18 décembre 2012
10 nov. 2011 à 09:09
Bonjour,
c'est la fenêtre pas une image de la fenêtre.En faite si je compile mon code source j'aurais une fenêtre JFrame avec ses différents boutons.je voudrais quand je clique sur le bouton imprimer
la fenêtre c'est à dire le JFrame soit imprimer
Merci d'avance
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
10 nov. 2011 à 09:40
il me semble que si tu met le code de Julien39 au niveau de ta JFrame ;o) tu aura bien ta JFrame exactement dans une image bouton, bord et tout compris...

si la methode n est pas dans ta JFrame il te faut récuperer une reference dessus pour le paint genre : Frm.this.paint( g2 );

sinon si la methode print ne te convien pas tu peux la redefinir ... ;o)



GodConan ;o)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
10 nov. 2011 à 16:00
Bonjour,

Si tu met le code que je t'ai donné dans la JFrame, je pense que tu obtiendras le panel contenu dans la JFrame mais pas le contour.

Sinon, tu peux toujours faire une capture d'écran en utilisant getLocationOnScreen() et getSize() pour découper

Tu peux suivre ce lien :
http://java.developpez.com/faq/gui/?page=graphique_general_images#GRAPHIQUE_IMAGE_capture_ecran

Tu peux également redéfinir la méthode print comme te le conseil GodConan mais je trouve que son fonctionnement est assez lourd, quand je peux m'en passer, je le fais.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
10 nov. 2011 à 16:15
vi ;o) fouille la class Robot ;o) elle peut peu etre t aider ;o)


GodConan ;o)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
10 nov. 2011 à 16:27
Oui, c'est exactement ce qui est sur le lien que je t'ai donné :
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(
        new Rectangle( frame.getX(), frame.getY(), frame.getWidth(), frame.getHeight() )
        );
0