IMPRESSION D'UN JPANEL (SANS COUPURE DES COMPOSANTS EN BAS DE PAGE)
bloofi
Messages postés388Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention 3 mai 2006
-
31 mai 2005 à 22:13
cs_byaa
Messages postés1Date d'inscriptionmercredi 19 juin 2013StatutMembreDernière intervention 7 juillet 2013
-
7 juil. 2013 à 23:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_byaa
Messages postés1Date d'inscriptionmercredi 19 juin 2013StatutMembreDernière intervention 7 juillet 2013 7 juil. 2013 à 23:41
Bonsoir!!!
Vraiment excellente votre classe, utile et pratique en plus
Merci beaucoup
Mon problème est que lorsque je lance l'impression avec mon bouton imprimer la fenêtre d'impression s'affiche si je clique sur ok, rien ne se passe, pas de bugs ni rien.
votre aide me sera d'une grande importance
Merci d'avance
shaymatartifelet
Messages postés2Date d'inscriptionlundi 5 décembre 2011StatutMembreDernière intervention16 mai 2013 16 mai 2013 à 22:13
bonsoir il enregistre le fichier comme xsp mais je ne le trouve pas c'est qu'un racourcie comment je fait?
shaymatartifelet
Messages postés2Date d'inscriptionlundi 5 décembre 2011StatutMembreDernière intervention16 mai 2013 16 mai 2013 à 21:12
bonsoir svvp mon fichier XPS et introuvable comme je pourais le consulter
Fshow
Messages postés6Date d'inscriptiondimanche 17 juin 2012StatutMembreDernière intervention14 juillet 2013 19 avril 2013 à 00:33
Bonsoir jais télécharger la classe mais je voulais l'appelé dans un bouton ? merçi davance!
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 18 déc. 2012 à 10:35
Le principe est le même pour un JTextComponent (comme par exemple JTextField): avec JTextComponent#getPrintable nous obtenons un Printable que nous enveloppons dans une nouvelle classe, que nous appelons par exemple "TextFieldReport implements Printable". Dans cette classe nous surchargeons la méthode print de l'interface Printable pour personnaliser l'impression.
La classe TableReportDemo montre également comment définir le format du papier.
Salutaions,
André
telmp3wav
Messages postés1Date d'inscriptiondimanche 18 octobre 2009StatutMembreDernière intervention17 décembre 2012 17 déc. 2012 à 11:49
Bonjour,
besoin d'aide ,
je voudrai automatisé une impression, exemple : j'imprime un texte qui vient d'un JText Field,en appuyant sur un bouton.
Hamdi501
Messages postés1Date d'inscriptionlundi 8 octobre 2012StatutMembreDernière intervention 8 octobre 2012 8 oct. 2012 à 13:17
slt
je vous demandes de meder ,je veut prendre les donnees d'un jtable et de le mettre sous format pdf et ensuite de l'imprimer
Merci
sebabarre
Messages postés2Date d'inscriptionlundi 30 mai 2011StatutMembreDernière intervention20 juillet 2012 20 juil. 2012 à 15:07
Nickel, bravo.
Juste pour râler, un peu de commentaires auraient pas été superflus....
Reisors
Messages postés153Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention 4 septembre 2013 5 mars 2012 à 14:02
Comment utiliser cette classe depuis celle de ma JFrame ?
cs_doudia
Messages postés3Date d'inscriptionvendredi 2 avril 2010StatutMembreDernière intervention12 juillet 2011 12 juil. 2011 à 14:47
bonjour pour la class MPanelPrinter sa imprime mais la moiter de mon panel car la largeur du panel est fixe et j utilise un JScrollepan pour defiler
si kelkun peut m'aider
cs_doudia
Messages postés3Date d'inscriptionvendredi 2 avril 2010StatutMembreDernière intervention12 juillet 2011 12 juil. 2011 à 14:43
public int print(final Graphics graphics, final PageFormat pageFormat, final int pageIndex)
cs_doudia
Messages postés3Date d'inscriptionvendredi 2 avril 2010StatutMembreDernière intervention12 juillet 2011 12 juil. 2011 à 14:32
merci
mais comment utiliser cette classe car pour instancier la methode print ();
cs_era
Messages postés77Date d'inscriptionlundi 6 mai 2002StatutMembreDernière intervention 4 mai 2011 18 avril 2011 à 11:11
MERCI.
Encore aujourd'hui je me sers de ta classe , je n arrivai pas a faire rentrer mon graphique dans une seule page
génial merci encore
tu m as éviter des heures de boulot inutile et mon patron va être content.
MERCI, MERCI, MERCI.....
cs_Rakh
Messages postés1Date d'inscriptionlundi 3 mai 2010StatutMembreDernière intervention 3 mai 2010 3 mai 2010 à 10:24
J'ai pris, j'ai essayé et ça me sauve la vie ! Merci mille fois !
legnomeminipouss
Messages postés2Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention19 mars 2010 18 févr. 2010 à 16:52
Merci beaucoup.
Ca m'éviter pas mal d'heure de boulot en plus.
Encore merci
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 8 août 2009 à 01:02
Je voudrais juste présenter ici une alternative simple (autre philosophie, on imprime en segments):
/*
* ContainerPrintable.java
* We can pass the container to be printed in the constructor.
* The printing is done in segments of height 10.
* We can adapt the segment height using method setSegmentHeight(..)
*/
public class ContainerPrintable implements Printable {
private Container container;//The container to print
private int segmentHeight = 10;//The container's segment height
private int totalWidth;//To save total width.
private int last = -1;//The most recent page index asked to print
private int segment = 0;//The next segment to print
private final Rectangle clip = new Rectangle(0, 0, 0, 0);//To store an area to be printed
private final Rectangle tempRect = new Rectangle(0, 0, 0, 0);
public int print(final Graphics graphics, final PageFormat pageFormat, final int pageIndex)
throws PrinterException {
final int imgWidth = (int) pageFormat.getImageableWidth();
final int imgHeight = (int) pageFormat.getImageableHeight();
if (imgWidth <= 0) {
throw new PrinterException("Width of printable area is too small.");
}
// the amount of vertical space available for printing the container
int availableSpace = imgHeight;
if (availableSpace <= 0) {
throw new PrinterException("Height of printable area is too small.");
}
// we need a scale factor to fit the container's entire width on the page
double scaleFactor = 1.0D;
if (totalWidth > imgWidth) {
scaleFactor = (double) imgWidth / (double) totalWidth;
}
while (last < pageIndex) {
if (segment >= getSegmentCount()) {// if we are finished with all segments
return NO_SUCH_PAGE;
}
int scaledHeight = (int) (availableSpace / scaleFactor);
// calculate the area of the container to be printed for this page
nextClip(scaledHeight);
last++;
}
// translate into the coordinate system of the pageFormat
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
// constrain the container output to the available space
tempRect.x = 0;
tempRect.y = 0;
tempRect.width = imgWidth;
tempRect.height = availableSpace;
g2d.clip(tempRect);
// if we have a scale factor, scale the graphics object to fit the entire width
if (scaleFactor != 1.0D) {
g2d.scale(scaleFactor, scaleFactor);
// otherwise, ensure that the current portion of the container is centered horizontally
} else {
int diff = (imgWidth - clip.width) / 2;
g2d.translate(diff, 0);
}
// store the old transform and clip for later restoration
AffineTransform oldTrans = g2d.getTransform();
Shape oldClip = g2d.getClip();
// print the current section of the container
g2d.translate(-clip.x, -clip.y);
g2d.clip(clip);
container.print(g2d);
// restore the original transform and clip
g2d.setTransform(oldTrans);
g2d.setClip(oldClip);
return PAGE_EXISTS;
}
private int getSegmentCount() {
return container.getHeight() / segmentHeight;
}
public void setSegmentHeight(final int segmentHeight) {
this.segmentHeight = segmentHeight;
}
public int getSegmentHeight() {
return segmentHeight;
}
private void nextClip(final int pageHeight) {
clip.x = 0;
clip.y += clip.height;// adjust clip to the top of the next set of segments
clip.height = 0;// adjust clip height to be zero
// fit as many segments as possible, and at least one
int segmentCount = getSegmentCount();
do {
clip.height += segmentHeight;
if (++segment >= segmentCount) {
break;
}
} while (clip.height + segmentHeight <= pageHeight);
clip.width = totalWidth;
}
}
LAmpli
Messages postés2Date d'inscriptionvendredi 24 juillet 2009StatutMembreDernière intervention24 juillet 2009 24 juil. 2009 à 15:34
Encore plus drôle quand je ne fais pas l'ouverture d'un ancien fichier et que j'exécute mon prog normalement, je n'ai plus de pb d'accumulation... sauf que ça n'imprime pas l'arrière plan de la fenêtre !!!
LAmpli
Messages postés2Date d'inscriptionvendredi 24 juillet 2009StatutMembreDernière intervention24 juillet 2009 24 juil. 2009 à 15:28
Je galère un peu parce qu'à l'usage de cette classe mon impression sur une seule page de mon JPanel (créé via netbeans)
l'appel se fait comme suit:
MPanelPrinter p = new MPanelPrinter(this);
p.print();
en gros rien de plus normal... mais au résulat on voit plusieurs fenêtres accumulées dont une 2e fois ma fenêtre mais décalée de quelques pixels vers les bas à droite, rendant tout illisible, ainsi que l'ancienne fenêtre OpenDialog et d'autres choses non identifiable mais dans la même veine.
j'ai oublié de préciser que mon panel en contient un fond et plein d'autres jpanel, contenant des jlabel en pagaille (qui donc se chevauchent au final), tout autant de TextFields, des boutons, des ScrollPanel, etc.
quelqu'un sait-il remédier à mon pb ?
chricomis
Messages postés1Date d'inscriptionlundi 1 juin 2009StatutMembreDernière intervention23 juillet 2009 23 juil. 2009 à 12:27
slt j'ai une ptit probleme le code ne marche toujour pas j'aimerai savoir comment utuliser ce code.merci
zbidii
Messages postés3Date d'inscriptionjeudi 14 mai 2009StatutMembreDernière intervention 8 juillet 2009 8 juil. 2009 à 13:46
slt,
Moi j'ai un autre problème. Quand j'appui sur mon bouton imprimer une fenetre s'ouvre. Mais quand j'appui sur ok rien ne se passe !!!!
lahoudieeric
Messages postés1Date d'inscriptionlundi 13 octobre 2008StatutMembreDernière intervention25 mai 2009 25 mai 2009 à 16:10
java.awt.print.PrinterException: Printer is not accepting job.
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1295)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1246)
D'autre ont eu cette erreur et si oui comment y remedier ? :o
cs_Knice
Messages postés1Date d'inscriptionmardi 18 janvier 2005StatutMembreDernière intervention 4 mai 2009 4 mai 2009 à 02:27
ENORMISSIME !
Merci beaucoup :)
chahrah
Messages postés23Date d'inscriptionjeudi 27 décembre 2007StatutMembreDernière intervention 4 mars 2010 8 avril 2009 à 12:54
dsl mais je c pas comment utiliser cette classe
pour imprimer mon propre pannel deja realiser
dsl si vous me donner les etapes pour l'excuter
y a un erreur qs j'excute la classe telle qu'elle est !!
est ce que tu pourrais m'expliquer la fonction de chacune des méthodes de ta fonction stp et si il y un ordre pour les utiliser stp??
En fait j'ai toujours le même problème c'est à dire quesur un des documents que j'imprime je retrouve mon titre au début de l'impression et je le retrouve à la fin également et la technique du regtangle blanc ne fonctionne pas...
La je n'ai pas trop de solution^^.
Merci MEP c'est bon ta technique fonctionne et encore mici pour ta classe qui me sert énormement.
++ Beberto56.
cs_mep
Messages postés86Date d'inscriptionvendredi 7 mai 2004StatutMembreDernière intervention 3 septembre 20084 3 sept. 2008 à 16:11
hello,
3 ans après, pas facile de me remémorer comment j'ai fait ma classe :)
bon, toujours est il que ça fait pas mal de temps que je m'en sert et je n'ai jamais vu ce pb. Tu peux essayer de finter comme je le fait pour le warpComponent, a savoir dessiner un carré blanc pour masquer la partie qu'on ne veux pas afficher. Regarde ce bout de code :
# if(wrapComponent)
# {
# double hauteurBlanc = ((Double)taillePages.get(pageIndex)).doubleValue();
# g2d.setColor(Color.WHITE);
# g2d.fillRect(0, (int)hauteurBlanc, (int)largeurPage, (int)hauteurBlanc + (int)hauteurPage);
# }
en gros tu fill un rectangle blanc qui commence sous la partie qui est affichée, donc sous la taille de ton panel + les marges. Normalement cette hauteur est calculé par la méthode calculatePages qui remplie l'arraylist avec les valeurs de la taille réelle de chaque page. Essai de bricoler ça sous l'appel du dessinage du Panel (panel.paint(g2d)).
J'ai pas testé parce que j'ai aps trop le temps, mais dans la théorie ca devrait marcher.
bonjour, tous d'abord merci pour la classe elle marche super bien. J'ai juste un petit problème: je me sert de la méthode FitIntoPage qui recadre parfaitement mon panel mais le problème c'est que en bas de page (car il me reste un peu d'espace) je retrouve le haut de mon panel qui se réimprime à la suite. J'ai donc tous mon panel et une petite partie du meme panel qui s'imprime j'ai donc mon titre en haut et en bas^^.
Est ce que quelqu'un aurais une solution pour éviter cela.
Merci d'avance
Beberto56.
nicomitmal
Messages postés5Date d'inscriptionsamedi 16 août 2008StatutMembreDernière intervention13 octobre 2010 18 août 2008 à 17:45
Voila qui résout mon probleme !
Je viens de voir qu'il faut obligatoirement que mon panel soit introduit dans une JFrame pour être imprimé...Je me demande bien pourquoi mais bon voila !
Le fait est qu'avec cet option -fenetre.setVisible(false)- mon jpanel s'imprime bien !
++ et merci
nicomitmal
Messages postés5Date d'inscriptionsamedi 16 août 2008StatutMembreDernière intervention13 octobre 2010 17 août 2008 à 01:55
Voila de quoi m'intriquer !!
Mes JPanels séparés sont imprimés mais pas quant à l'impression ils sont ensemble !
De plus ma JTable n'imprime qu'une partie, la partie visible, sur la page. Si le nombre de lignes dépasse dans l'affichage et qu'une Jscroll apparait et bien cette barre de défilement apparait aussi à l'impression !! Comment faire pour qu'au lieu de cela ma table apparaisse entière, quitte à prendre deux page s'il faut !
Merci pour votre attention et pour vos éventuels conseils
nicomitmal
Messages postés5Date d'inscriptionsamedi 16 août 2008StatutMembreDernière intervention13 octobre 2010 17 août 2008 à 00:35
Pas moyen d'imprimer mes infos.
J'ai laissé le JPanel dans le paramètre et le mien est constitué de deux composants : un Jpanel avec des JLabel et un second avec un JTable.
Je n'ai pas d'imprimante sous la main, alors je lance mes impression via Microsoft XPS Document Writer.
Mon document s'imprime dans un fichier qui se créé bien mais il est vierge. Une page blanche pour résultat !
De plus quand je choisi l'option "Imprimer dans un fichier" dans tout les cas il y a un probleme qui s'affiche !
Quelqu'un sait il pourquoi ?? Quelqu'un peut il m'aider ??? merci
tmNoooR
Messages postés37Date d'inscriptionmercredi 6 août 2008StatutMembreDernière intervention22 janvier 2011 6 août 2008 à 19:58
merci ta sauvé ma vie
cs_pokitos
Messages postés21Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention27 juillet 2008 28 mars 2008 à 16:42
Salut,
Tout d'abord très bon ce code, vraiment génial, merci beaucoup.
J'espère que quelqu'un lira ce message.
Pour ma part j'ai juste modifier en jTextpane le panel , ça marche pareil.
Donc pour ceux qui ont ce problème avec les tables trop grande, je voudrai savoir ce qu'il faut modifier pour réduire la taille de l'image qui sera imprimer et de ce fait avoir mon tableau en entier, sachant que j'imprime en mode paysage grâce au setorientation.
Merci.
cs_Louch
Messages postés1Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention12 septembre 2007 12 sept. 2007 à 11:22
Bonjour,
Excellente classe, très instinctive qui plus est!
A utiliser sans modération.
atha2
Messages postés3Date d'inscriptionjeudi 16 novembre 2006StatutMembreDernière intervention26 juillet 2007 16 août 2007 à 22:10
salut,
génial ton truque!!!
merci tu m'enlève une sacré épine du pied
cs_rem02
Messages postés15Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention30 avril 2007 7 janv. 2007 à 01:42
Bonjour,
Un grand merci, trés bonne classe à garder sous la main...
Je l'ai modifier afin d'imprimer un JEditorPane... ( simple sufffit de remplacer jPanel par JEditorPane ^^ ).
Sinon il y a juste un petit truc, il n'y a pas toute les ouvertures et fermetures des if et else (je trouve que ça nuis à la lisibilité du code) surtout quand tu est débutant.
cs_platinum07
Messages postés11Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention 1 août 2006 1 août 2006 à 17:21
bonjour,
j'aimerais utiliser cette source qui me simplifierait bien la vie, mais voilà, elle ne fonctionne pas chez moi. J'utilise un JPanel dans lequel il y a plusieurs jpanels disposés en grille.
A l'intérieur de chaque, il y a une ImageIcon et un JLabel.
Lorsque je lance l'impression, rien n'apparait sur ma feuille sauf le numéro de ma page et le titre, preuve que le jpanel en entrée n'est pas vide...
quelqu'un aurait-il une idée, je désespère !
d'avance merci.
empiret
Messages postés38Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention13 mars 2006 8 mars 2006 à 15:54
Je me permets de repondre a cette demande:
Tu as un jpanel: mypanel, que tu veux imprimer.
Ce que tu dois faire:
MPanelPrinter printP = new MPanelPrinter(mypanel);
printP.print();
Par contre, j'ai toujours le probleme d'un jpanel qui n'est pas imprime en entier. Il n'est pas reduit pour etre imprime sur toute la largeur d'une feuille A4.
developabdel
Messages postés1Date d'inscriptionjeudi 24 mars 2005StatutMembreDernière intervention16 février 2006 16 févr. 2006 à 16:54
bonjour je suis débutant en java, j'ai besoin d'utiliser cette classe alors je vous demande de me poster juste un exemple d'utilisation si possible .. car comme je vous ai dit je viens de commencer en java ! merçi
e_zidore
Messages postés1Date d'inscriptionvendredi 29 juillet 2005StatutMembreDernière intervention 8 janvier 2006 8 janv. 2006 à 11:26
Merçi beaucoup pour cette classe qui m'a été bien pratique.
kinnex91
Messages postés18Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention25 novembre 2005 21 sept. 2005 à 14:29
Hello,
- SAYENVEGETA, EMPIRET :
Pour transformer votre JFrame en Graphics :
Graphics g = nom__obj_JFrame.getGraphics();
- Sinon ta classe est génial, faut juste que je me penche sur le GridBagLayout.
- Seul pb rencontré, la boite de dialogue veux m'irmprimer 9999 pages : une idée ?
++ ALL
empiret
Messages postés38Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention13 mars 2006 12 sept. 2005 à 09:11
Bonjour,
Moi aussi j'ai le meme besoin:
Mes jtables sont grands, et lors de l'impression, on ne voit pas la totalite.
SayenVegeta
Messages postés9Date d'inscriptiondimanche 7 août 2005StatutMembreDernière intervention20 avril 2009 7 août 2005 à 22:56
Salut
ca marche bien comme class
mais moi j ai un souci
sur mon panel j ai des JLabel et des JTable
mon probleme c est que en largeur je suis trop grand par rapport a une feuille A4
j ai modifier les marges (merci aux methodes qui vont bien)
mais ca suffit pas du tout
je pense que la methode print(Graphics g, PageFormat pf, int pageIndex) recadre le tout
mais le probleme c est l argument Graphics, je sais pas koi mettre
la feuille que je veux imprimé, c est une JFrame qui continent un JPanel qui contient des JLabel, des JTables
je doit faire quoi? transformer le panel en element Graphics???
si quelqu un pouvai m eclairer se serai sympa
merci
beny_59
Messages postés1Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention19 juillet 2005 19 juil. 2005 à 10:39
Bonjour, chez moi, le paint() pose un problème de superposition graphisme, étant donné que j'ai une architecture de composants assez complexe !
Je suggère donc de remplacer la ligne :
panel.paint(g2d);
par la ligne :
panel.printAll(g2d);
qui est plus adapté à l'impression.
Voilà. Sinon, cette classe est géniale. Merci.
cs_mep
Messages postés86Date d'inscriptionvendredi 7 mai 2004StatutMembreDernière intervention 3 septembre 20084 10 juin 2005 à 11:06
Voila j'ai fait une mise a jour pour regler le probleme des marges. Dans la fonction de setage de marge il fo donné la taille en pixel a rajouter sur les coté par rapport au document de base. Aussi on peut aussi imprimer le nom du document et le numero de page.
cs_muad-dib
Messages postés103Date d'inscriptionlundi 9 avril 2001StatutMembreDernière intervention16 juillet 2008 9 juin 2005 à 18:47
Très sympa ta classe. Mais tu ne saurais pas s'il y aurait un moyen d'enelever les marges sur les bords lors de l'impression ? (environ 2 - 3 cm de marge chez moi)
olivierInfo
Messages postés2Date d'inscriptionjeudi 9 novembre 2000StatutMembreDernière intervention 4 janvier 2010 6 juin 2005 à 07:35
Beau travail.
indiana_jules
Messages postés750Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention23 décembre 200822 1 juin 2005 à 10:34
Ma foi, je trouve cette classe tès sympathique ;)
merci d'en faire profiter
bloofi
Messages postés388Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention 3 mai 20062 31 mai 2005 à 22:13
genial ^^
bien pratique, marche aussi avec mes panels et tout mon bousin.
merki bien !
7 juil. 2013 à 23:41
Vraiment excellente votre classe, utile et pratique en plus
Merci beaucoup
Mon problème est que lorsque je lance l'impression avec mon bouton imprimer la fenêtre d'impression s'affiche si je clique sur ok, rien ne se passe, pas de bugs ni rien.
votre aide me sera d'une grande importance
Merci d'avance
16 mai 2013 à 22:13
16 mai 2013 à 21:12
19 avril 2013 à 00:33
18 déc. 2012 à 10:35
http://wiki.byte-welt.net/wiki/JTable_Druckfunktion_anpassen
Le principe est le même pour un JTextComponent (comme par exemple JTextField): avec JTextComponent#getPrintable nous obtenons un Printable que nous enveloppons dans une nouvelle classe, que nous appelons par exemple "TextFieldReport implements Printable". Dans cette classe nous surchargeons la méthode print de l'interface Printable pour personnaliser l'impression.
La classe TableReportDemo montre également comment définir le format du papier.
Salutaions,
André
17 déc. 2012 à 11:49
besoin d'aide ,
je voudrai automatisé une impression, exemple : j'imprime un texte qui vient d'un JText Field,en appuyant sur un bouton.
private void imprMouseClicked(java.awt.event.MouseEvent evt) {
MessageFormat header = new MessageFormat(" ");
MessageFormat footer = new MessageFormat(" ");
try{
text_impr.print(header, footer, true, null, null, true);
} catch (java.awt.print.PrinterException e){
System.err.format("Cannot print %sn",e.getMessage());
}
}
Maintenant je voudrais que l'impression ce fait toujours en paysage , que mon texte soit en bas de la page et écrie en bleu,
Comment faire?, merci
9 oct. 2012 à 10:21
http://sourceforge.net/projects/pdfcreator/
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#printing
Une fois le PDF créé, nous pouvons l'imprimer en utilisant un programme comme par exemple Adobe Reader.
8 oct. 2012 à 13:17
je vous demandes de meder ,je veut prendre les donnees d'un jtable et de le mettre sous format pdf et ensuite de l'imprimer
Merci
20 juil. 2012 à 15:07
Juste pour râler, un peu de commentaires auraient pas été superflus....
5 mars 2012 à 14:02
12 juil. 2011 à 14:47
si kelkun peut m'aider
12 juil. 2011 à 14:43
12 juil. 2011 à 14:32
mais comment utiliser cette classe car pour instancier la methode print ();
18 avril 2011 à 11:11
Encore aujourd'hui je me sers de ta classe , je n arrivai pas a faire rentrer mon graphique dans une seule page
génial merci encore
tu m as éviter des heures de boulot inutile et mon patron va être content.
MERCI, MERCI, MERCI.....
3 mai 2010 à 10:24
18 févr. 2010 à 16:52
Ca m'éviter pas mal d'heure de boulot en plus.
Encore merci
8 août 2009 à 01:02
/*
* ContainerPrintable.java
* We can pass the container to be printed in the constructor.
* The printing is done in segments of height 10.
* We can adapt the segment height using method setSegmentHeight(..)
*/
import java.awt.*;
import java.awt.print.*;
import java.awt.geom.*;
public class ContainerPrintable implements Printable {
private Container container;//The container to print
private int segmentHeight = 10;//The container's segment height
private int totalWidth;//To save total width.
private int last = -1;//The most recent page index asked to print
private int segment = 0;//The next segment to print
private final Rectangle clip = new Rectangle(0, 0, 0, 0);//To store an area to be printed
private final Rectangle tempRect = new Rectangle(0, 0, 0, 0);
public ContainerPrintable(final Container container) {
this.container = container;
container.setBackground(Color.WHITE);
totalWidth = container.getWidth();
}
public int print(final Graphics graphics, final PageFormat pageFormat, final int pageIndex)
throws PrinterException {
final int imgWidth = (int) pageFormat.getImageableWidth();
final int imgHeight = (int) pageFormat.getImageableHeight();
if (imgWidth <= 0) {
throw new PrinterException("Width of printable area is too small.");
}
// the amount of vertical space available for printing the container
int availableSpace = imgHeight;
if (availableSpace <= 0) {
throw new PrinterException("Height of printable area is too small.");
}
// we need a scale factor to fit the container's entire width on the page
double scaleFactor = 1.0D;
if (totalWidth > imgWidth) {
scaleFactor = (double) imgWidth / (double) totalWidth;
}
while (last < pageIndex) {
if (segment >= getSegmentCount()) {// if we are finished with all segments
return NO_SUCH_PAGE;
}
int scaledHeight = (int) (availableSpace / scaleFactor);
// calculate the area of the container to be printed for this page
nextClip(scaledHeight);
last++;
}
// translate into the coordinate system of the pageFormat
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
// constrain the container output to the available space
tempRect.x = 0;
tempRect.y = 0;
tempRect.width = imgWidth;
tempRect.height = availableSpace;
g2d.clip(tempRect);
// if we have a scale factor, scale the graphics object to fit the entire width
if (scaleFactor != 1.0D) {
g2d.scale(scaleFactor, scaleFactor);
// otherwise, ensure that the current portion of the container is centered horizontally
} else {
int diff = (imgWidth - clip.width) / 2;
g2d.translate(diff, 0);
}
// store the old transform and clip for later restoration
AffineTransform oldTrans = g2d.getTransform();
Shape oldClip = g2d.getClip();
// print the current section of the container
g2d.translate(-clip.x, -clip.y);
g2d.clip(clip);
container.print(g2d);
// restore the original transform and clip
g2d.setTransform(oldTrans);
g2d.setClip(oldClip);
return PAGE_EXISTS;
}
private int getSegmentCount() {
return container.getHeight() / segmentHeight;
}
public void setSegmentHeight(final int segmentHeight) {
this.segmentHeight = segmentHeight;
}
public int getSegmentHeight() {
return segmentHeight;
}
private void nextClip(final int pageHeight) {
clip.x = 0;
clip.y += clip.height;// adjust clip to the top of the next set of segments
clip.height = 0;// adjust clip height to be zero
// fit as many segments as possible, and at least one
int segmentCount = getSegmentCount();
do {
clip.height += segmentHeight;
if (++segment >= segmentCount) {
break;
}
} while (clip.height + segmentHeight <= pageHeight);
clip.width = totalWidth;
}
}
24 juil. 2009 à 15:34
24 juil. 2009 à 15:28
l'appel se fait comme suit:
MPanelPrinter p = new MPanelPrinter(this);
p.print();
en gros rien de plus normal... mais au résulat on voit plusieurs fenêtres accumulées dont une 2e fois ma fenêtre mais décalée de quelques pixels vers les bas à droite, rendant tout illisible, ainsi que l'ancienne fenêtre OpenDialog et d'autres choses non identifiable mais dans la même veine.
j'ai oublié de préciser que mon panel en contient un fond et plein d'autres jpanel, contenant des jlabel en pagaille (qui donc se chevauchent au final), tout autant de TextFields, des boutons, des ScrollPanel, etc.
quelqu'un sait-il remédier à mon pb ?
23 juil. 2009 à 12:27
8 juil. 2009 à 13:46
Moi j'ai un autre problème. Quand j'appui sur mon bouton imprimer une fenetre s'ouvre. Mais quand j'appui sur ok rien ne se passe !!!!
25 mai 2009 à 16:10
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1295)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1246)
D'autre ont eu cette erreur et si oui comment y remedier ? :o
4 mai 2009 à 02:27
Merci beaucoup :)
8 avril 2009 à 12:54
pour imprimer mon propre pannel deja realiser
dsl si vous me donner les etapes pour l'excuter
y a un erreur qs j'excute la classe telle qu'elle est !!
printer started with null constructor
5 sept. 2008 à 15:34
est ce que tu pourrais m'expliquer la fonction de chacune des méthodes de ta fonction stp et si il y un ordre pour les utiliser stp??
En fait j'ai toujours le même problème c'est à dire quesur un des documents que j'imprime je retrouve mon titre au début de l'impression et je le retrouve à la fin également et la technique du regtangle blanc ne fonctionne pas...
La je n'ai pas trop de solution^^.
Merki d'avance
Beberto56.
4 sept. 2008 à 09:01
++ Beberto56.
3 sept. 2008 à 16:11
3 ans après, pas facile de me remémorer comment j'ai fait ma classe :)
bon, toujours est il que ça fait pas mal de temps que je m'en sert et je n'ai jamais vu ce pb. Tu peux essayer de finter comme je le fait pour le warpComponent, a savoir dessiner un carré blanc pour masquer la partie qu'on ne veux pas afficher. Regarde ce bout de code :
# if(wrapComponent)
# {
# double hauteurBlanc = ((Double)taillePages.get(pageIndex)).doubleValue();
# g2d.setColor(Color.WHITE);
# g2d.fillRect(0, (int)hauteurBlanc, (int)largeurPage, (int)hauteurBlanc + (int)hauteurPage);
# }
en gros tu fill un rectangle blanc qui commence sous la partie qui est affichée, donc sous la taille de ton panel + les marges. Normalement cette hauteur est calculé par la méthode calculatePages qui remplie l'arraylist avec les valeurs de la taille réelle de chaque page. Essai de bricoler ça sous l'appel du dessinage du Panel (panel.paint(g2d)).
J'ai pas testé parce que j'ai aps trop le temps, mais dans la théorie ca devrait marcher.
a+
3 sept. 2008 à 15:11
Est ce que quelqu'un aurais une solution pour éviter cela.
Merci d'avance
Beberto56.
18 août 2008 à 17:45
Je viens de voir qu'il faut obligatoirement que mon panel soit introduit dans une JFrame pour être imprimé...Je me demande bien pourquoi mais bon voila !
Le fait est qu'avec cet option -fenetre.setVisible(false)- mon jpanel s'imprime bien !
++ et merci
17 août 2008 à 01:55
Mes JPanels séparés sont imprimés mais pas quant à l'impression ils sont ensemble !
De plus ma JTable n'imprime qu'une partie, la partie visible, sur la page. Si le nombre de lignes dépasse dans l'affichage et qu'une Jscroll apparait et bien cette barre de défilement apparait aussi à l'impression !! Comment faire pour qu'au lieu de cela ma table apparaisse entière, quitte à prendre deux page s'il faut !
Merci pour votre attention et pour vos éventuels conseils
17 août 2008 à 00:35
J'ai laissé le JPanel dans le paramètre et le mien est constitué de deux composants : un Jpanel avec des JLabel et un second avec un JTable.
Je n'ai pas d'imprimante sous la main, alors je lance mes impression via Microsoft XPS Document Writer.
Mon document s'imprime dans un fichier qui se créé bien mais il est vierge. Une page blanche pour résultat !
De plus quand je choisi l'option "Imprimer dans un fichier" dans tout les cas il y a un probleme qui s'affiche !
Quelqu'un sait il pourquoi ?? Quelqu'un peut il m'aider ??? merci
6 août 2008 à 19:58
28 mars 2008 à 16:42
Tout d'abord très bon ce code, vraiment génial, merci beaucoup.
J'espère que quelqu'un lira ce message.
Pour ma part j'ai juste modifier en jTextpane le panel , ça marche pareil.
Donc pour ceux qui ont ce problème avec les tables trop grande, je voudrai savoir ce qu'il faut modifier pour réduire la taille de l'image qui sera imprimer et de ce fait avoir mon tableau en entier, sachant que j'imprime en mode paysage grâce au setorientation.
Merci.
12 sept. 2007 à 11:22
Excellente classe, très instinctive qui plus est!
A utiliser sans modération.
16 août 2007 à 22:10
génial ton truque!!!
merci tu m'enlève une sacré épine du pied
7 janv. 2007 à 01:42
Un grand merci, trés bonne classe à garder sous la main...
Je l'ai modifier afin d'imprimer un JEditorPane... ( simple sufffit de remplacer jPanel par JEditorPane ^^ ).
Sinon il y a juste un petit truc, il n'y a pas toute les ouvertures et fermetures des if et else (je trouve que ça nuis à la lisibilité du code) surtout quand tu est débutant.
1 août 2006 à 17:21
j'aimerais utiliser cette source qui me simplifierait bien la vie, mais voilà, elle ne fonctionne pas chez moi. J'utilise un JPanel dans lequel il y a plusieurs jpanels disposés en grille.
A l'intérieur de chaque, il y a une ImageIcon et un JLabel.
Lorsque je lance l'impression, rien n'apparait sur ma feuille sauf le numéro de ma page et le titre, preuve que le jpanel en entrée n'est pas vide...
quelqu'un aurait-il une idée, je désespère !
d'avance merci.
8 mars 2006 à 15:54
Tu as un jpanel: mypanel, que tu veux imprimer.
Ce que tu dois faire:
MPanelPrinter printP = new MPanelPrinter(mypanel);
printP.print();
Par contre, j'ai toujours le probleme d'un jpanel qui n'est pas imprime en entier. Il n'est pas reduit pour etre imprime sur toute la largeur d'une feuille A4.
16 févr. 2006 à 16:54
8 janv. 2006 à 11:26
21 sept. 2005 à 14:29
- SAYENVEGETA, EMPIRET :
Pour transformer votre JFrame en Graphics :
Graphics g = nom__obj_JFrame.getGraphics();
- Sinon ta classe est génial, faut juste que je me penche sur le GridBagLayout.
- Seul pb rencontré, la boite de dialogue veux m'irmprimer 9999 pages : une idée ?
++ ALL
12 sept. 2005 à 09:11
Moi aussi j'ai le meme besoin:
Mes jtables sont grands, et lors de l'impression, on ne voit pas la totalite.
7 août 2005 à 22:56
ca marche bien comme class
mais moi j ai un souci
sur mon panel j ai des JLabel et des JTable
mon probleme c est que en largeur je suis trop grand par rapport a une feuille A4
j ai modifier les marges (merci aux methodes qui vont bien)
mais ca suffit pas du tout
je pense que la methode print(Graphics g, PageFormat pf, int pageIndex) recadre le tout
mais le probleme c est l argument Graphics, je sais pas koi mettre
la feuille que je veux imprimé, c est une JFrame qui continent un JPanel qui contient des JLabel, des JTables
je doit faire quoi? transformer le panel en element Graphics???
si quelqu un pouvai m eclairer se serai sympa
merci
19 juil. 2005 à 10:39
Je suggère donc de remplacer la ligne :
panel.paint(g2d);
par la ligne :
panel.printAll(g2d);
qui est plus adapté à l'impression.
Voilà. Sinon, cette classe est géniale. Merci.
10 juin 2005 à 11:06
9 juin 2005 à 18:47
6 juin 2005 à 07:35
1 juin 2005 à 10:34
merci d'en faire profiter
31 mai 2005 à 22:13
bien pratique, marche aussi avec mes panels et tout mon bousin.
merki bien !