Imprimer texte

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 4 sept. 2007 à 10:22
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 4 sept. 2007 à 10:55
Bonjour à tous.

j'essay d'ajouter une fonction d'impression à mon application. Pour cela, j'utilise le package "java.awt.print" (PrinterJob).
j'ai realisé une petite class mais ... elle ne fonctionne pas.
But de cette class: On passe un String en paramètre (le texte à imprimer). Lors de l'impression, la class va récupérer le nombre de ligne limite (10) a mettre sur une page. Ele va ajouter ces lignes sur une page banche et lancer l'impression.
Le probleme, c'est que, lorsque le texte dépasse 10 lignes (limite pour le teste), l'impression plante (affichage de "null").

public class Imprimeur implements Printable {
 
 
 //Le texte quel'on est charger d'imprimer
 private String[] texte;
 
 //Pour le traitement des pages et des lignes.
 private String[] textei;
 
 //Le nombre de ligne par page
 private final int x = 10; //10 pour le teste
 
 
 /**
  *Un constructeur vide.
  *
  **/
 public Imprimeur () {
  
  
  
 }
 
 
 /**
  *Un constructeur avec, en paramètre, le texte à imprimer.
  *
  **/
 public Imprimeur (String[] t) {
  
  setTexte(t);
  
 }
 
 
 
 /**
  *Pour définir le texte à imprimer.
  *
  **/
 public void setTexte (String[] t) {
  
  this.texte = t;
  this.textei = this.texte;
  
 }
 
 
 
 /**
  *Pour lancé l'impression.
  *
  **/
 public void imprimer () {
  
  PrinterJob job = PrinterJob.getPrinterJob();
  job.setPrintable(this);
  
  if (job.printDialog()) {
   try {
    job.print();
   }catch (Exception ex) {ex.printStackTrace();}
  }
  
 }
 
 
 
 /**
  *L'impression dite.
  *
  **/
 public int print (Graphics g, PageFormat f, int pi) {
  
  //Le composant graphique support (une sorte de nouvelle page blanche)
  Graphics2D g2d = (Graphics2D)g;
  g2d.setPaint(Color.black);
  
  //Le text qui sera présent sur cette page
  String txt = "";
  
  //Init du texte qui sera sur la page courante
  for (int a=0; a<x && a<textei.length; a++) {
   
   txt += "" + textei[a];
   System.out.println("" + textei[a]); //vaeur retournée "null", sans cesse et en continue.
   
   /*if (a == x)
    txt += "\n";*/
   
  }
  
  //On écri le texte sur la page
  g2d.drawString(txt, 0, 0);
  
  //Actualisation du texte à imprimer (on supprime le texte déjà imprimé)
  String[] tmp = new String[Math.abs(textei.length-x)];
  for (int b=x; b<(textei.length-x); b++) {
   
   tmp[b-x] = textei[b];
   
  }
  textei = tmp;
  
  //Impression ...
  if (textei.length > 0)
   return PAGE_EXISTS;
  
  return NO_SUCH_PAGE;
  
 }
 
 
 public static void main (String arg[]) {
  
  String[] test = new String[10];
  for (int a=0; a<10; a++)
   test[a] = "" + a;
  
  new Imprimeur(test).imprimer();
  
 }
 
}

Si vous avez des suggestions ou autre.

merci.

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 sept. 2007 à 10:35
Salut,

Tu devrais utiliser plutôt un framework de reporting qui est fait spécifiquement pour cà (JasperReport est très bien par exemple !). Ca t'évitera de devoir réinventer la roue, et surtout, tu pourra bénéficier de l'expertise de ce framework !
______________________________________
DarK Sidious
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
4 sept. 2007 à 10:55
Bonjour.
Je ne vois pas trop ce que je dois faire une fois que j'ai mon rapport. Je vais continuer à chercher des tutos et des codes (pour essayer de mieux comprendre comment ca fonctionne, ca n'a pas l'air facile). Au départ, cette class ne devait que récupérer le texte contenu dans un JTextArea et ensuite l'imprimer tel qu'il est dans ce composant.

merci.
0
Rejoignez-nous