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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| public class PageAImprimer implements Printable{
protected TraitEditorPane editeur;
protected JFrame f;
/**
* Constructeur
* @param pg : la page que l'on veut imprimer
* @param f : la fenêtre dans laquelle on affichera le panel (nécessaire pour le créer réellement)
*/
public PageAImprimer(Page pg, JFrame f) {
if (pg != null)
this.editeur = pg.creerEditeur();
else
this.editeur = null;
this.f = f;
}
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (editeur == null)
return Printable.NO_SUCH_PAGE;
JPanel affiche = new JPanel();
affiche.setLayout(new BorderLayout());
affiche.add(new JLabel(" Page : "+(pageIndex+1)),BorderLayout.PAGE_START);
JScrollPane scroll = new JScrollPane(editeur);
scroll.setPreferredSize(new Dimension(120,40));
affiche.add(scroll, BorderLayout.PAGE_END);
f.setContentPane(affiche);
f.pack();
if (f.isVisible())
f.repaint();
else
f.setVisible(true);
// Récupère les dimensions de la zone imprimable et de l'image
double xGauche = pageFormat.getImageableX();
if (xGauche<0)
xGauche = 0;
double yHaut = pageFormat.getImageableY();
if (yHaut<0)
yHaut = 0;
double largeurDocu = editeur.getWidth();
double largeurPage = pageFormat.getImageableWidth();
double hauteurDocu = editeur.getHeight();
double hauteurPage = pageFormat.getImageableHeight();
Graphics2D g2d = (Graphics2D)graphics;
g2d.setFont(editeur.getFont());
//change la couleur de fond en blanc
g2d.setColor(Color.white);
g2d.fillRect((int)xGauche, (int)yHaut, (int)largeurPage, (int)hauteurPage);
if (pageFormat.getOrientation()==PageFormat.PORTRAIT)
{
if (largeurDocu>largeurPage || hauteurDocu>hauteurPage)
{
double scaleX = largeurPage / largeurDocu;
double scaleY = hauteurPage / hauteurDocu;
double ratio = Math.min(scaleX, scaleY);
g2d.scale(ratio, ratio);
}
}
else
{
if (largeurDocu>hauteurPage || hauteurDocu>largeurPage)
{
double scaleX = largeurPage / largeurDocu;
double scaleY = hauteurPage / hauteurDocu;
double ratio = Math.min(scaleX, scaleY);
g2d.scale(ratio, ratio);
}
}
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.translate(xGauche, yHaut);
editeur.paint(g2d);
return Printable.PAGE_EXISTS;
}
} |
Partager