L'Ampli J'débute mais ça va saigner... | pour faciliter la compréhension voilà le code de la class MPanelPrinter écrite par Mep (source Java-code je crois)
Code :
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.GridBagLayout;
- import java.awt.RenderingHints;
- import java.awt.print.PageFormat;
- import java.awt.print.Paper;
- import java.awt.print.Printable;
- import java.awt.print.PrinterException;
- import java.awt.print.PrinterJob;
- import java.util.Vector;
- import javax.swing.*;
- public class MPanelPrinter implements Printable
- {
- public MPanelPrinter(JPanel panel)
- {
- documentTitle = "";
- this.panel = panel;
- initPrintablePanel();
- }
- public void initPrintablePanel()
- {
- showPrintZone = false;
- fitIntoPage = true;
- wrapComponent = false;
- printJob = PrinterJob.getPrinterJob();
- pageFormat = printJob.defaultPage();
- pageFormat.setOrientation(0);
- }
- public void setOrientation(int orientation)
- {
- pageFormat.setOrientation(orientation);
- }
- public void setPrintZoneVisible(boolean status)
- {
- showPrintZone = status;
- }
- public void setWrapComponent(boolean status)
- {
- wrapComponent = status;
- }
- public void setFitIntoPage(boolean status)
- {
- fitIntoPage = status;
- }
- public int getPageWidth()
- {
- return (int)pageFormat.getImageableWidth();
- }
- public double getMarginTop ()
- {
- return pageFormat.getImageableY();
- }
- public double getMarginLeft ()
- {
- return pageFormat.getImageableX();
- }
- public void setLRMargins(int margin)
- {
- Paper paper = pageFormat.getPaper();
- paper.setImageableArea(paper.getImageableX() - (double)(margin / 2), paper.getImageableY(),paper.getImageableWidth() + (double)(margin / 2), paper.getImageableHeight());
- pageFormat.setPaper(paper);
- }
- public void setTBMargins(int margin)
- {
- Paper paper = pageFormat.getPaper();
- paper.setImageableArea(paper.getImageableX(), paper.getImageableY() - (double)(margin / 2), paper.getImageableWidth(), paper.getImageableHeight() + (double)(margin / 2));
- pageFormat.setPaper(paper);
- }
- public void setDocumentTitle(String title)
- {
- documentTitle = title;
- }
- public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException
- {
- Dimension tailleDoc = panel.getSize();
- double hauteurDocu = tailleDoc.getHeight();
- double hauteurPage = pf.getImageableHeight();
- double largeurDocu = tailleDoc.getWidth();
- double largeurPage = pf.getImageableWidth();
- int totalNumPages = (int)Math.ceil(hauteurDocu / hauteurPage);
- if(wrapComponent){
- totalNumPages = taillePages.size();
- }
- else{
- if(fitIntoPage){
- totalNumPages = 1;
- }
- }
- double scaleX = largeurPage / largeurDocu;
- double scaleY = hauteurPage / hauteurDocu;
- if(pageIndex >= totalNumPages){return 1;}
- Graphics2D g2d = (Graphics2D)g;
- g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
- g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
- g2d.translate(pf.getImageableX(), pf.getImageableY());
- if(fitIntoPage){
- double ratio = Math.min(scaleX, scaleY);
- g2d.scale(ratio, ratio);
- }
- else {
- if(wrapComponent){
- if(pageIndex > 0){
- g2d.translate(0.0D, -((Double)taillePages.get(pageIndex - 1)).doubleValue());
- }
- }
- else{
- g2d.translate(0.0D, (double)(-pageIndex) * hauteurPage);
- }
- }
- panel.paintAll(g2d);
- if(wrapComponent){
- double hauteurBlanc = ((Double)taillePages.get(pageIndex)).doubleValue();
- g2d.setColor(Color.WHITE);
- g2d.fillRect(0, (int)hauteurBlanc, (int)largeurPage, (int)hauteurBlanc + (int)hauteurPage);
- }
- if(wrapComponent){
- if(pageIndex > 0)
- g2d.translate(0.0D, ((Double)taillePages.get(pageIndex - 1)).doubleValue());
- }
- else{
- g2d.translate(0.0D, (double)pageIndex * hauteurPage);
- }
- return 0;
- }
- public void print()
- {
- printJob.setPrintable(this, pageFormat);
- try
- {
- if(printJob.printDialog())
- {
- if(wrapComponent)
- calculatePages();
- Paper paper = pageFormat.getPaper();
- Paper save = pageFormat.getPaper();
- paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
- pageFormat.setPaper(paper);
- printJob.setPrintable(this, pageFormat);
- printJob.print();
- pageFormat.setPaper(save);
- }
- }
- catch(PrinterException pe)
- {
- System.out.println("Erreur lors de l'impression du document: " + toString());
- }
- }
- private void calculatePages()
- {
- taillePages = new Vector();
- double hauteurPage = pageFormat.getImageableHeight();
- double hauteurTotal = 0.0D;
- double hauteurCumul = 0.0D;
- for(int i = 0; i < panel.getComponentCount(); i++)
- {
- int gridBagInsets = 0;
- if(panel.getLayout() instanceof GridBagLayout)
- gridBagInsets = ((GridBagLayout)panel.getLayout()).getConstraints(panel.getComponent(i)).insets.bottom + ((GridBagLayout)panel.getLayout()).getConstraints(panel.getComponent(i)).insets.top;
- double hauteurComponent = panel.getComponent(i).getSize().getHeight() + (double)gridBagInsets;
- if(hauteurComponent > hauteurPage)
- {
- wrapComponent = false;
- return;
- }
- hauteurTotal += hauteurComponent;
- if(hauteurTotal > hauteurPage)
- {
- hauteurTotal -= hauteurComponent;
- hauteurCumul += hauteurTotal;
- taillePages.add(new Double(hauteurCumul));
- hauteurTotal = hauteurComponent;
- }
- }
- hauteurCumul += hauteurTotal;
- taillePages.add(new Double(hauteurCumul));
- }
- private JPanel panel;
- private boolean showPrintZone;
- private boolean fitIntoPage;
- private boolean wrapComponent;
- private PageFormat pageFormat;
- private PrinterJob printJob;
- private Vector taillePages;
- private String documentTitle;
- public static final int PORTRAIT = 1;
- public static final int LANDSCAPE = 0;
- }
|
en ce qui concerne l'appel, c'est tout simplement:
Code :
- MPanelPrinter printP = new MPanelPrinter(this);
- printP.print();
|
où this désigne la classe Ecran extends JPanel qui contient notamment la méthode suivante:
Code :
- public static void affiche(){
- JFrame f = new JFrame ("Nouveau Perso" );
- [...]
- f.setContentPane(new Background());
- JComponent compo = new Ecran();
- f.add(compo)
- [...]
- fenetre=f; // fenetre est une JFrame statique définie précédemment dans la classe
- }
|
|