Impression dans ireport [Résolu]

asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 23 juil. 2012 à 14:01 - Dernière réponse : asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention
- 3 août 2012 à 11:22
bonjour tout le monde je m'appelle hicham j'habite au Maroc et j'ai besoin de votre aide :D

bon voila j'ai crée une application java avec ireport qui me permet d'imprimer des informations selon les lignes sélectionnées dans une jtable voici un apercu comme vous le constater les informations de chaque ligne sélectionner et afficher dans une vue différente et ma question est comment je peux afficher toute les information sélectionner dans la même vue sachant quand je clic sur une ligne l'identifiant de cette ligne est envoyer dans un arraylist et quand j'imprime je parcours cet arraylist voici mon code
// mon arraylist contient le Rc qui est l'identifiant avec le quel j'imprime 
java.util.List<String> listrc = new ArrayList<String>();

            Iterator<String> i = listrc.iterator();
            //ici je parcoure le arraylist
while(i.hasNext()){
  String x = (String)i.next();
System.out.println(x);
                    try{
            // ici je récupère l&#8217;état de chaque ligne si les informations ont déjà était imprimer donc recupEtat="oui" il est impossible d'imprimer la meme ligne une seconde fois
    Statement stt=connexion.getCon().createStatement();
    ResultSet rss=stt.executeQuery("select imprimer from impression where rc='"+x+"'");
    while (rss.next()) {
    String recupEtat=rss.getString("imprimer");
    System.out.println(recupEtat);
    // si recupEtat="non" donc pas encore imprimer l'impression est permise 
    if(recupEtat.equalsIgnoreCase( "non") ){
        stt.executeUpdate("update impression set  imprimer='oui' where rc='"+x+"'");
        String url = "jdbc:mysql://localhost:3306/packbidayati";
        String login = "user";
        String password = "123";
        Connection connection = null;
        System.out.println(x);
        try {
            // - Connexion à la base    
            Driver monDriver = new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(monDriver);
            connection = DriverManager.getConnection(url, login, password);
            // - Chargement et compilation du rapport     
     jasperDesign = JRXmlLoader.load("C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vue.jrxml");
            JRDesignQuery query=new JRDesignQuery();
            query.setText("select rs,rc,date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ "  datex from impression where rc='" +x+"'");
            
            jasperDesign.setQuery(query);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    Map parameters = new HashMap();
    parameters.put("Titre", "Titre");
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
JasperExportManager.exportReportToPdfFile(jasperPrint,"C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vuei.pdf");
    JasperViewer.viewReport(jasperPrint);
            
        } catch (JRException e) {
              System.err.println(e.getMessage());
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            try {
                 connection.close();
                } catch (SQLException e) {
                    System.err.println(e.getMessage());
                }   }
 
    }
    
    if(recupEtat.equalsIgnoreCase("oui")){
        JOptionPane.showMessageDialog(null,"cette carte est déja imprimée");
    }
    }
}catch(SQLException ee){
    
}
} 


voila donc j’espère que quelqu'un va m'aider et excuser moi si j'ai pas bien expliquer se que je cherche merci d'avance :)
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
Utilisateur anonyme - 23 juil. 2012 à 15:36
3
Merci
Salut,

Je te rassure, ton post est assez clair.
Je ne connais pas vraiment Jasper pour l'instant, mais j'imagine que, quand tu parles des "vues", tu fais références aux trois petites fenêtres dans l'image en lien. A mon avis, je pense que c'est la ligne JasperViewer.viewReport(jasperPrint); qui est à l'origine de la création d'une vue. Et comme celle-ci est dans une boucle (ton while(i.hasNext()){), tu créés trois vues car je pense que cette boucle tourne trois fois. A mon avis, il faudrait voir si tu peux sortir ta ligne JasperViewer.viewReport(jasperPrint); de ta boucle, et voir si tu ne peux pas charger ton jasperPrint de sorte à ce que tu y regroupes les données de tes trois vues.

Vois-tu où je veux en venir ?


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 2 août 2012 à 02:15
3
Merci
bonjour :D

c'est bon j'ai réussi à le faire et voila le code final

     Iterator<String> i = listrc.iterator();
    String x = null;    
     String recupEtat = null;
    List<String> aImprimer = new ArrayList<String>();
while(i.hasNext()){
    x = (String)i.next();
System.out.println(x);

try{
       Statement stt=connexion.getCon().createStatement();
    ResultSet rss=stt.executeQuery("select imprimer from impression where rc='"+x+"'");
    while (rss.next()) {
    recupEtat=rss.getString("imprimer");
    System.out.println(recupEtat);
    
    if(recupEtat.equalsIgnoreCase( "non") ){
        stt.executeUpdate("update impression set  imprimer='oui' where rc='"+x+"'");
        aImprimer.add( x );
        
    }else{
        JOptionPane.showMessageDialog(null," cette carte est déja imprimer");
    }
    
}

} catch(SQLException ae){
    
}
                 }    
            StringBuilder sb = new StringBuilder();
for ( int j = 0; j < aImprimer.size() - 1; j++ ){

sb.append( "rc='" );
sb.append(aImprimer.get(j) );
sb.append( "' or " );

}
/* On n'ajoutera pas de "or" à la fin de la requête, donc on récupère le dernier RC ici */
sb.append( "rc='" );
sb.append( aImprimer.get(aImprimer.size()-1) );
sb.append( "'" );

    
    if(recupEtat.equalsIgnoreCase( "non") ){
       
        String url = "jdbc:mysql://localhost:3306/packbidayati";
        String login = "user";
        String password = "123";
        Connection connection = null;
        System.out.println(x);
        try {
            // - Connexion à la base    
            Driver monDriver = new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(monDriver);
            connection = DriverManager.getConnection(url, login, password);
            // - Chargement et compilation du rapport     
     JasperDesign jasperDesign = JRXmlLoader.load("C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_1juju\\src\\classic.jrxml");
            JRDesignQuery query=new JRDesignQuery();
            query.setText("select rs, rc, date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ "  datex from impression where " + sb.toString() );
            
            jasperDesign.setQuery(query);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            Map parameters = new HashMap();
            parameters.put("Titre", "Titre");
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
JasperExportManager.exportReportToPdfFile(jasperPrint,"C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_1juju\\src\\classic.pdf");
            JasperViewer.viewReport(jasperPrint);
            
        } catch (JRException e) {
              System.err.println(e.getMessage());
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            try {
                 connection.close();
                } catch (SQLException e) {
                    System.err.println(e.getMessage());
                }   }
 
    }
    
    if(recupEtat.equalsIgnoreCase("oui")){
        JOptionPane.showMessageDialog(null,"cette carte est déja imprimée");
    }


et voila le résultat c'est exactement se que je cherche :) merci pour l'astuce du Stringbuilder c'est très pratique

merci mille fois Pylouq

Merci asetabularia 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de asetabularia
Meilleure réponse
Utilisateur anonyme - 2 août 2012 à 23:19
3
Merci
Nickel ! Je suis content pour toi qu'on ai résolu ton problème !

Maintenant, clique sur "Réponse acceptée" sur ton dernier post pour clore tout ça :)

Bon courage pour la suite et si tu as d'autres questions ou problèmes, repasse sur le forum !

@+!


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 3 août 2012 à 11:22
3
Merci
merci beaucoup :D

Merci asetabularia 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de asetabularia
asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 23 juil. 2012 à 18:15
0
Merci
bonjour

merci Pylouq pour votre réponse

j'ai tester se que vous m'aviez dis mais il m'affiche que la première ligne sélectionnée,donc je vais essayer de trouver une solution concernant le jasperprint

merci encore

(si quelqu'un à une idée n'hésitez pas )
Commenter la réponse de asetabularia
Utilisateur anonyme - 24 juil. 2012 à 15:35
0
Merci
Salut,

Pourrais-tu afficher la version modifiée de ton code stp ?


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Commenter la réponse de Utilisateur anonyme
asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 24 juil. 2012 à 17:24
0
Merci
bonjour

après la modification ça m'affiche qu'un seul résultat le voila j'ai remarquer que quand je sélectionne plusieurs lignes il m'imprime juste la ligne qui à le plus grand index dans le Jtable et voici le code

// mon arraylist contient le Rc qui est l'identifiant avec le quel j'imprime 
java.util.List<String> listrc = new ArrayList<String>();

            Iterator<String> i = listrc.iterator();
            //ici je parcoure le arraylist
while(i.hasNext()){
  String x = (String)i.next();
System.out.println(x);
                    try{
            // ici je récupère l&#8217;état de chaque ligne si les informations ont déjà était imprimer donc recupEtat="oui" il est impossible d'imprimer la meme ligne une seconde fois
    Statement stt=connexion.getCon().createStatement();
    ResultSet rss=stt.executeQuery("select imprimer from impression where rc='"+x+"'");
    while (rss.next()) {
    String recupEtat=rss.getString("imprimer");
    System.out.println(recupEtat);
    // si recupEtat="non" donc pas encore imprimer l'impression est permise 
    if(recupEtat.equalsIgnoreCase( "non") ){
        stt.executeUpdate("update impression set  imprimer='oui' where rc='"+x+"'");
        String url = "jdbc:mysql://localhost:3306/packbidayati";
        String login = "user";
        String password = "123";
        Connection connection = null;
        System.out.println(x);
        try {
            // - Connexion à la base    
            Driver monDriver = new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(monDriver);
            connection = DriverManager.getConnection(url, login, password);
            // - Chargement et compilation du rapport     
     jasperDesign = JRXmlLoader.load("C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vue.jrxml");
            JRDesignQuery query=new JRDesignQuery();
            query.setText("select rs,rc,date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ "  datex from impression where rc='" +x+"'");
            
            jasperDesign.setQuery(query);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    Map parameters = new HashMap();
    parameters.put("Titre", "Titre");

            
        } catch (JRException e) {
              System.err.println(e.getMessage());
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            try {
                 connection.close();
                } catch (SQLException e) {
                    System.err.println(e.getMessage());
                }   }
 
    }
    
    if(recupEtat.equalsIgnoreCase("oui")){
        JOptionPane.showMessageDialog(null,"cette carte est déja imprimée");
    }
    }
}catch(SQLException ee){
    
}
}  
        String url = "jdbc:mysql://localhost:3306/packbidayati";
        String login = "user";
        String password = "123";
        connection = null;
  try {
//connection à la base 
                  Driver monDriver = new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(monDriver);
            connection = DriverManager.getConnection(url, login, password);
// la partie que j'ai fait sortir de la boucle while(i.hasNext())
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
          
                JasperExportManager.exportReportToPdfFile(jasperPrint,"C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vuei.pdf");
                 JasperViewer.viewReport(jasperPrint);
            } catch (JRException ex) {
               
            }catch(SQLException z){
                
            }



merci :)
Commenter la réponse de asetabularia
Utilisateur anonyme - 25 juil. 2012 à 15:31
0
Merci
Peux-tu poster le code qui s'occuper de ta JTable avec la gestion des clics etc ? Il y a un truc qui m'échappe, je finirais par tomber dessus (manque de temps aujourd'hui).


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Commenter la réponse de Utilisateur anonyme
asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 25 juil. 2012 à 17:19
0
Merci
bonjour ^^

voila le code :)

    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
        int r =jTable1.getSelectedRow();
if (r==-1) {
} else 
{
 listrc = new ArrayList<String>();
int [] ind = jTable1.getSelectedRows();
int z =ind.length;
String[] listaId = new String[z+1];

for (int i=0; i<z; i++) {
listrc.add((String) jTable1.getValueAt(ind[i], 1));
}
listaId = (String[])listrc.toArray(new String[listrc.size()]);
                        
}
    }

Commenter la réponse de asetabularia
Utilisateur anonyme - 26 juil. 2012 à 17:24
0
Merci
Dis moi, le code dans ton avant-dernier post (ou dans le premier) est dans une fonction non ? Quand et où l'appelles-tu ?


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Commenter la réponse de Utilisateur anonyme
asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 26 juil. 2012 à 17:59
0
Merci
bonjour

j'ai mis directement le code dans le bouton "imprimer" il n'est pas dans une fonction , après avoir sélectionner les lignes souhaiter dans ma jtable je clic sur le bouton "imprimer" , si vous voulez je peux vous envoyer mon projet par e mail

merci pour le temps que vous m'accordez !
Commenter la réponse de asetabularia
Utilisateur anonyme - 28 juil. 2012 à 15:55
0
Merci
En fait, si j'ai bien compris, la requête du code ci-dessous

query.setText("select rs,rc,date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ "  datex from impression where rc='" +x+"'");


te retournes les infos dont tu as besoin c'est ça ? Et je vois que tu boucles avec un itérateur, et qu'à chaque tour tu récupères la valeur rc qui sera utilisée pour la requête SQL et enfin une vue. Je tenterais bien de faire une seule requête avec toutes les valeurs rc qui ont été sélectionnées. Comme ça, plusieurs valeurs te seront renvoyées et du coup tu pourras avoir le tout en une seule vue. Je reposterais sous peu un exemple de code que tu pourras tester.

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 28 juil. 2012 à 16:27
0
Merci
Donc voilà le code à la louche. Attention, j'ai fait ça vite fait pour essayer, et forcément je n'ai pas compilé.

// mon arraylist contient le RC qui est l'identifiant avec lequel j'imprime 
List<String> listrc = new ArrayList<String>(); /* /!\ Tu effectue des imports plutôt que de passer par les packages à chaque fois */
Iterator<String> i = listrc.iterator()

/* aImprimer : Il s'agit d'une liste qui prendra les RC à imprimer (on fera les choses en plusieurs temps) */
List<Long> aImprimer = new ArrayList<Long>();

/* PREMIERE ETAPE : il va te permettre de voir pour chaque RC s'il a déjà été imprimé ou non (et de faire l'update dans ce cas) */
while(i.hasNext()){

String x = (String)i.next(); /* Tu récupères un RC par ton itérateur */
System.out.println(x);

try{
 
// ici je récupère l'état de chaque ligne si les informations ont déjà été imprimées donc recupEtat="oui" il est impossible d'imprimer la même ligne une seconde fois
Statement stt=connexion.getCon().createStatement();
ResultSet rss=stt.executeQuery("select imprimer from impression where rc='"+x+"'");

while (rss.next()) {

String recupEtat=rss.getString("imprimer");
System.out.println(recupEtat);

// si recupEtat="non" donc pas encore imprimé l'impression est permise 
if(recupEtat.equalsIgnoreCase( "non") ){

stt.executeUpdate("update impression set  imprimer='oui' where rc='"+x+"'");

System.out.println(x);

/* Tu ajoutes à ta liste le RC pour pouvoir le réutiliser plus tard avec tes impressions etc */
aImprimer.add( (Long) x );

} else if(recupEtat.equalsIgnoreCase("oui")){
JOptionPane.showMessageDialog(null,"cette carte est déja imprimée");
}

}

} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
connection.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}   
}

}

/* DEUXIEME ETAPE : il va te permettre de faire un bout de ta requête SQL : on mettra un "where" avec plusieurs "or" afin de toucher un maximum de valeurs 
Pour que ce soit plus optimisés, j'utilise un StringBuffer*/
StringBuffer sb = new StringBuffer();
for ( int i = 0; i < aImprimer.size() - 1; i++ ){

sb.append( "rc='" );
sb.append( aImprimer.get(i) );
sb.append( "' or " );

}
/* On n'ajoutera pas de "or" à la fin de la requête, donc on récupère le dernier RC ici */
sb.append( "rc='" );
sb.append( aImprimer.get(aImprimer.size()-1) );
sb.append( "'" );

/* TROISIEME ETAPE : on va voir ce que va donner une requête qui va prendre en compte d'un coup tous les RC qu'on veut */
try {

String url = "jdbc:mysql://localhost:3306/packbidayati";
String login = "user";
String password = "123";
Connection connection = null;

// - Connexion à la base    
Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
connection = DriverManager.getConnection(url, login, password);
// - Chargement et compilation du rapport     
jasperDesign = JRXmlLoader.load("C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vue.jrxml");
JRDesignQuery query=new JRDesignQuery();

query.setText("select rs, rc, date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ "  datex from impression where " + sb.toString() );

jasperDesign.setQuery(query);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Map parameters = new HashMap();
parameters.put("Titre", "Titre");


} catch (JRException e) {
System.err.println(e.getMessage());
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
connection.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}   
}

/* DERNIERE ETAPE : on compile le tout avec les résultats qu'on a eu */
try {
//connection à la base 
    Driver monDriver = new com.mysql.jdbc.Driver();
    DriverManager.registerDriver(monDriver);
    connection = DriverManager.getConnection(url, login, password);
// la partie que j'ai fait sortir de la boucle while(i.hasNext())
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
    JasperExportManager.exportReportToPdfFile(jasperPrint,"C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vuei.pdf");
    JasperViewer.viewReport(jasperPrint);
} catch (JRException ex) {
               
}catch(SQLException z){

}


L'idée c'est que dans un premier temps je récupère tous les RC comme tu as fait, et que je mets ensuite dans une liste les RC qui n'ont pas été imprimés.
Une fois tout ça parcouru, je complète ta requête SQL pour pouvoir prendre en compte tous les RC non imprimés, à chaque fois toi tu faisais une requête par RC.
Ensuite je fais le rapport Jasper, et enfin la viewReport.

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 30 juil. 2012 à 23:18
0
Merci
Alors, où en es-tu ? As-tu essayé ce que j'ai posté précédemment ? As-tu résolu ton problème ?


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Commenter la réponse de Utilisateur anonyme
asetabularia 12 Messages postés lundi 23 juillet 2012Date d'inscription 11 mai 2013 Dernière intervention - 31 juil. 2012 à 14:40
0
Merci
bonjour :D

j'ai tester votre code la requête avec les or est correcte mais je comprend pas ou est le problème avec cette erreur

"Operation not allowed after ResultSet closed" voila un aperçu de l'erreur ici les deux flèches montre l'affichage du rc et de son état

merci
Commenter la réponse de asetabularia
Utilisateur anonyme - 31 juil. 2012 à 22:58
0
Merci
Salut,

C'est curieux ça. Peux-tu me dire quelle est la ligne concernée stp ? J'ai l'impression que tu essayes à un moment de manipuler le ResultSet alors qu'il a été fermé.


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.