import javax.swing.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.*; public class JEditorPaneImprimable extends JEditorPane implements Printable{ private int cla_numPagePrec; public JEditorPaneImprimable() { super(); } public void setNumPagePrec(int par_nb){cla_numPagePrec=par_nb;} public int numOfPages(PageFormat par_pf) { double loc_pageWidth=par_pf.getImageableWidth(); double loc_pageHeight=par_pf.getImageableHeight(); double loc_scale=1; if (getSize().width>loc_pageWidth) loc_scale=loc_pageWidth/getSize().width; double loc_pageHeightOngraph=(loc_pageHeight-par_pf.getImageableY())/loc_scale; //calcul du nombre de page int loc_pages=(int)Math.ceil((getSize().getHeight()/loc_pageHeightOngraph)); return loc_pages; } public int print(Graphics par_g,PageFormat par_pf,int par_PageIndex) throws PrinterException { //Conversion du graphics en graphcs 2d Graphics2D loc_g2d=(Graphics2D)par_g; //calcul de la dimension d'une page et de la taille des ecritures int loc_fontHeight=loc_g2d.getFontMetrics().getHeight(); int loc_fontDescent=loc_g2d.getFontMetrics().getDescent(); double loc_pageWidth=par_pf.getImageableWidth(); double loc_pageHeight=par_pf.getImageableHeight(); //calcul du numero reel de la page int loc_numPage=par_PageIndex-cla_numPagePrec; //calcul du coefficient reducteur pour imprimer l'integralite //du graphics(en largeur) sur une page. double loc_scale=1; if (getSize().width>loc_pageWidth) loc_scale=loc_pageWidth/getSize().width; double loc_pageHeightOngraph=(loc_pageHeight-par_pf.getImageableY())/loc_scale; double loc_pageWidthOngraph=loc_pageWidth/loc_scale; //calcul du nombre de page int loc_pages=(int)Math.ceil((getSize().getHeight()/loc_pageHeightOngraph)); //verification de la page if (loc_numPage>=loc_pages) return NO_SUCH_PAGE; //deplacement du curseur pour dessin du pied de page //sans ecraser le reste du graphique loc_g2d.translate(par_pf.getImageableX(),par_pf.getImageableY()); //numero de page en pied de page loc_g2d.drawString("Page "+(par_PageIndex+1),(int)(loc_pageWidth)/2-35,(int)((loc_pageHeight-loc_fontDescent))); //retour sur la premiere partie du graphique loc_g2d.translate(0f,-((loc_pageHeight-par_pf.getImageableY()-loc_fontHeight)*loc_numPage)); //decoupage du graphics pour recuperer l'equivalent d'une page A4 loc_g2d.setClip(0,(int)((loc_pageHeight-par_pf.getImageableY()-loc_fontHeight)*loc_numPage),(int)Math.ceil(loc_pageWidthOngraph),(int)Math.ceil(loc_pageHeight-par_pf.getImageableY())); //redimensionne loc_g2d.scale(loc_scale,loc_scale); setDoubleBuffered(false); paint(loc_g2d); setDoubleBuffered(true); return PAGE_EXISTS; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question