Bonjour,
j'ai trouvé le code suivant pour imprimer un Jcomponent : «
[code]import java.awt.*;
import javax.swing.*;
import java.awt.print.*;
public class PrintUtilities implements Printable {
/** le composant à imprimer */
private Component componentToBePrinted;
/** imprimer composant
* @param c le composant
*/
public static void printComponent(Component c) {
new PrintUtilities(c).print();
}
/** constructeur
* @param componentToBePrinted compsant à imprimer
*/
public PrintUtilities(Component componentToBePrinted) {
this.componentToBePrinted = componentToBePrinted;
}
/** print method **/
public void print() {
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
if (printJob.printDialog())
try {
printJob.print();
} catch(PrinterException pe) {
System.out.println("Error printing: " + pe);
}
}
/**
* Imprimer en passant en paramètres les marges en millimètres
* Aucune marge en haut et en bas...
* @param Mgauche marge gauche de la feuille exprimée en millimètres
* @param Mdroite marge droite de la feuille exprimée en millimètres
* @param Mhaut marge haut de la feuille exprimée en millimètres
* @param Mbas marge bas de la feuille exprimée en millimètres
*/
public void print(int Mgauche, int Mdroite, int Mhaut, int Mbas) {
boolean annuler = false;
PrinterJob printJob = PrinterJob.getPrinterJob();
PageFormat pf = printJob.defaultPage();
Paper papier = new Paper();
double gauche = Mgauche * 72 / 25.4;
double droite = Mdroite * 72 / 25.4;
double haut = Mhaut * 72 / 25.4;
double bas = Mbas * 72 / 25.4;
file: //fait une marge de 10 mm (donc 10/25.4 pouces avec un point =1/72 pouces)
papier.setImageableArea(gauche, haut, papier.getWidth() - (gauche + droite), papier.getHeight()-(haut+bas) );
pf.setPaper(papier);
file:
printJob.setPrintable(this,pf);
if (printJob.printDialog())
try {
printJob.print();
} catch(PrinterException pe) {
System.out.println("Error printing: " + pe);
}
else annuler = true;
}
/** print method
* @param g graphisme
* @param pageFormat format
* @param pageIndex index
* @return valeur de retour de l'impression
*/
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
if (pageIndex > 0) {
return(NO_SUCH_PAGE);
} else {
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
disableDoubleBuffering(componentToBePrinted);
componentToBePrinted.paint(g2d);
enableDoubleBuffering(componentToBePrinted);
return(PAGE_EXISTS);
}
}
public static void disableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(false);
}
/**
* @param c composant
*/
public static void enableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(true);
}
}[/code] »
Cependant, quand j'utilise cette classe, l'imprimante me renvoie le message d'erreur suivante : « Remplacez le papier par Lettre ou forcez l'impression sur A4 ». Auriez-vous une idée des lignes qu'il me faut changer pour que mon document s'imprime au format A4 en paysage ???
Merci d'avance.
Fabien