didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
4 sept. 2007 à 10:22
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDerniè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) {
/**
*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;
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 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.