Impression contenu d'un JPanel

cs_claroune Messages postés 3 Date d'inscription vendredi 16 juillet 2004 Statut Membre Dernière intervention 16 juin 2005 - 30 mai 2005 à 14:44
sano2a1986 Messages postés 3 Date d'inscription lundi 30 mars 2009 Statut Membre Dernière intervention 1 avril 2009 - 26 avril 2009 à 21:18
Bonjour,
Je souhaiterais pouvoir imprimer le contenu d'un JPanel mais je ne vois pas du tout comment programmer ca.
Pouvez vous m'aider?
Merci d'avance

3 réponses

cs_mep Messages postés 86 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 3 septembre 2008 4
30 mai 2005 à 15:12
Salut,



Le probleme est relativement simple tant qu'on veut imprimer 1 seul
page, sinon il faut prevoir le decoupage en page a la main. Il faut en
fait calculer le nombre de page en faisant le ratio hauteur de la page
/ hauteur du panel. Une fois ce ratio calculer il suffit de translater
le panel de -la taille de la page * le numero de la page pour imprimer
le contenu de la page courante. Enfin je suppose que ceci est
relativement abstrait c'est pourquoi je vous propose un petit exemple
dans l'espoir que ceci pourra vous eclairer :



/*

* Created on 30 mai 2005

* MPrintablePanel.java

*/

package up5.questel2.client.composant;



import java.awt.Dimension;

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.JPanel;



/**

* @author mep

*

*/

public class MPrintablePanel extends JPanel implements Printable {



private boolean showPrintZone;

private boolean fitIntoPage;



private PageFormat pageFormat;

private PrinterJob printJob;





public static final int PORTRAIT = PageFormat.PORTRAIT;

public static final int LANDSCAPE = PageFormat.LANDSCAPE;



public MPrintablePanel() {

super();



showPrintZone = false;

fitIntoPage = false;



printJob = PrinterJob.getPrinterJob();

pageFormat = printJob.defaultPage();



pageFormat.setOrientation(PageFormat.PORTRAIT);

}





//orientation de la page

public void setOrientation (int orientation) {

pageFormat.setOrientation(orientation);

}



//definit si on affiche les zones d'impression

public void setPrintZoneVisible (boolean status) {

showPrintZone = status;

}



//permet de forcer le redimentionnement du document pour qu'il rentre dans 1 page

public void setFitIntoPage (boolean status) {

fitIntoPage = status;

}





//methode d'impression appeler par le printjob

public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {





Dimension tailleDoc = this.getSize();





double hauteurDocu = tailleDoc.getHeight();

double hauteurPage = pf.getImageableHeight();

double largeurDocu = tailleDoc.getWidth();

double largeurPage = pf.getImageableWidth();





int totalNumPages = 1;

if (!fitIntoPage)

totalNumPages = (int) Math.ceil(hauteurDocu / hauteurPage);





double scaleX = (largeurPage-pf.getImageableX()*2)/largeurDocu;

double scaleY = (hauteurPage-pf.getImageableY()*2)/hauteurDocu;







if (pageIndex >= totalNumPages) {

return(NO_SUCH_PAGE);

}

else {

Graphics2D g2d = (Graphics2D)g;

g2d.translate(pf.getImageableX(), pf.getImageableY());



if (fitIntoPage) {


double ratio = Math.min(scaleX, scaleY);

g2d.scale(ratio, ratio);

}

else {


g2d.translate(0f, -pageIndex * hauteurPage);


}





this.paint(g2d);





return(PAGE_EXISTS);

}

}





public void print () {



printJob.setPrintable((Printable)this, pageFormat);




try {

if(printJob.printDialog())


printJob.print();

}

catch (PrinterException pe) {


System.out.println("Erreur lors de l'impression du document: " +
this.toString());

}



}





public void paint(Graphics g) {

super.paint(g);





int hauteurPage = (int)pageFormat.getHeight()-(int)pageFormat.getImageableY()*2;

int largeurPage = (int)pageFormat.getWidth()-(int)pageFormat.getImageableX()*2;





if (showPrintZone) {

g.drawLine(0, hauteurPage, largeurPage, hauteurPage);

g.drawLine(largeurPage, 0, largeurPage, hauteurPage);

}

}



}
0
cs_sikou100 Messages postés 37 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 18 mai 2012
17 avril 2008 à 13:42
salut a tous mon probleme ce comment faire pour imprimer un interface en couleur;
 je fait le code si dessous puis au click sur le bouton imprimer l'impression ca marche tres bien mais l'interface imprimer est en noir-blanc or mois je veut comment faire pour que l'imression ce fait par couleur;
*************code source **********************
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Properties;


class MonDessin extends JPanel
{
  public void paint(Graphics g)
    {
      g.setColor(Color.red);
         g.fillOval(50, 20, 80, 80);
    }
}


public class EssaiImprimer extends JFrame implements  ActionListener

  MonDessin dessin = new MonDessin();
  JButton imprimer = new JButton("imprimer");
  ButtonGroup choix = new ButtonGroup();
  JRadioButton choixTout = new JRadioButton("tout", true);
  JRadioButton choixDessin = new JRadioButton("dessin", false);
  JPanel p = new JPanel();


  EssaiImprimer()
  {
    Container interieur = getContentPane();
    choix.add(choixTout);
    choix.add(choixDessin);
    p.add(choixTout);
    p.add(choixDessin);
    interieur.add("North", p);
    dessin.setPreferredSize(new Dimension(180, 120));
    interieur.add(dessin, BorderLayout.CENTER);
    Panel p1=new Panel();
    interieur.add("South", imprimer);
    imprimer.addActionListener(this);
    addWindowListener(new WindowAdapter()
       {
  public void windowClosing(WindowEvent evt)
    {
      System.exit(0);
    }
       });
  }


  public void actionPerformed(ActionEvent e)
  {
    Properties props = new Properties();
    props.put("awt.print.paperSize", "a4");
    props.put("awt.print.destination", "printer");


   
    PrintJob pJob = getToolkit().getPrintJob(this,
     "Printing_Test", props);
    if (pJob != null)
      {
        Graphics pg = pJob.getGraphics();
        if (choixTout.isSelected()) printAll(pg);
        else dessin.printAll(pg);
        pg.dispose();
        pJob.end();
      }
  }


  public static void main(String[] argv)
  {
    EssaiImprimer monCadre = new EssaiImprimer();
    monCadre.pack();
    monCadre.setVisible(true);
  }
}
************in code source ********* 
ci quelqu'un sait comment faire repond mois svp   et merci d'avance
0
sano2a1986 Messages postés 3 Date d'inscription lundi 30 mars 2009 Statut Membre Dernière intervention 1 avril 2009
26 avril 2009 à 21:18
qulqn peut m'envoyer le code d'imprimer le contenu d'un Jpanel(java) Svp
merci d'avance
0
Rejoignez-nous