IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BIRT Discussion :

Comment peut-on accéder aux cellules d'une Table à partir de sa méthode OnRender ?


Sujet :

BIRT

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Comment peut-on accéder aux cellules d'une Table à partir de sa méthode OnRender ?
    Bonjour,

    Je voudrais savoir s'il y a possibilité de modifier la FontSIze des labels contenus dans une Table à partir de son OnRender(). J'ai réussi à le faire à partir du OnPrepare() mais j'ai besoin de le faire dans le OnRender(). Pq ?
    Je vous explique le scénario que j'ai réussi et celui que j'ai envie de réussir:
    Quand j'ouvre mon rapport en pdf la FontSize change grâce au code suivant à mettre dans le OnPrepare de la Table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    if( reportContext.getOutputFormat().equalsIgnoreCase("pdf") ){
     
    	this.setName("myTable");
    	tableHandle = reportContext.getDesignHandle().findElement("myTable");  
     
    	// table header
    	tableheader = tableHandle.getHeader().get(0); 
     
     	for( i=0; i < this.getColumnCount()-1; i++){ 				
     		cell = tableheader.getCells().get(i);			 				
     		cell.getContent().get(0).getPrivateStyle().getFontSize().setStringValue("6px"); 							
    	}
     
     	// table detail
     	tabledetail = tableHandle.getDetail().get(0);
     
     	tabledetail = tableHandle.getDetail().get(0);
     	for( i=0; i < this.getColumnCount()-1; i++){ 				
     		cell = tabledetail.getCells().get(i); 	 			 				
     		cell.getContent().get(0).getPrivateStyle().getFontSize().setStringValue("6px"); 
    	}	 			 			 		
    }
    Pour les adeptes java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    package test;
     
     
    import org.eclipse.birt.report.engine.api.script.IReportContext;
    import org.eclipse.birt.report.engine.api.script.element.ITable;
    import org.eclipse.birt.report.engine.api.script.eventadapter.TableEventAdapter;
    import org.eclipse.birt.report.engine.api.script.instance.ICellInstance;
    import org.eclipse.birt.report.engine.api.script.instance.IRowInstance;
    import org.eclipse.birt.report.engine.api.script.instance.ITableInstance;
    import org.eclipse.birt.report.model.api.CellHandle;
    import org.eclipse.birt.report.model.api.DesignElementHandle;
    import org.eclipse.birt.report.model.api.ModuleHandle;
    import org.eclipse.birt.report.model.api.RowHandle;
    import org.eclipse.birt.report.model.api.TableHandle;
     
     
    public class TableEA extends TableEventAdapter {	
     
    	int table_size;	
     
    	/* Table onPrepare event */
    	public void onPrepare(ITable table, IReportContext reportContext)  {
    		try {    	
    			//table.getStyle().setBackgroundColor("green"); 
     
    			table_size = table.getColumnCount();
     
    			if( reportContext.getOutputFormat().equalsIgnoreCase("pdf") ){
     
    				DesignElementHandle designHandle = reportContext.getReportRunnable().getDesignHandle();			
    				ModuleHandle moduleHandle = designHandle.getModuleHandle();		
    				table.setName("myTable");
    				TableHandle tableHandle = (TableHandle) moduleHandle.findElement(table.getName());  
     
    				// table header
    				RowHandle tableheader = (RowHandle) tableHandle.getHeader( ).get(0); 
     
    	 			for( int i=0; i < table.getColumnCount()-1; i++){ 				
    	 				CellHandle cell = (CellHandle) tableheader.getCells( ).get(i); 	 			 				
    	 				cell.getContent().get(0).getPrivateStyle().getFontSize().setStringValue("6px"); 				
     
    				}  		
     
    	 			// table detail
    	 			RowHandle tabledetail = (RowHandle) tableHandle.getDetail( ).get(0);
    	 			for( int i=0; i < table.getColumnCount()-1; i++){ 				
    	 				CellHandle cell = (CellHandle) tabledetail.getCells( ).get(i); 	 			 				
    	 				cell.getContent().get(0).getPrivateStyle().getFontSize().setStringValue("6px"); 
    				}
     
    			}			
    		} 
    		catch ( Exception e ) {
    			e.printStackTrace( );
    		}
    	}
     
    	/* Table onRender event */
    	public void onRender(ITableInstance table, IReportContext reportContext)  {	}
     
     
    }
    Le problème est que quand j'ouvre mon rapport avec le Viewer et qu'ensuite j'exporte en pdf, mon script n'est pas pris en compte ce qu'il est normal, car au moment de l'export on est plus dans la phase "génération" du rapport mais plutôt dans la phase "présentation". Du coup il faut agir dans le OnRender et non pas dans le OnPrepare. Le problème est que dans le OnRender on manipule un "ITableInstance" et non pas un "ITable" comme dans le OnPrepare. Et un "ITableInstance" ne permet pas d'accéder au contenu des cellules (après plusieurs tentatives). Alors si vous voulez, on peut toujours modifier la FontSize en allant dans le OnRender de chaque Label mais c'est fatiguant.
    Donc voilà si vous avez une idée, ça serait sympa !

    Merci à tous !

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Bonjour,

    As-tu essayé d'appliquer un style et de modifier le style sur le onRender ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Excusez-moi, j'ai eu droit à droit à quelques jours de vacances.

    J'avais essayé ce script dans l'initialize :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dh = reportContext.getDesignHandle();
    if( reportContext.getOutputFormat().equalsIgnoreCase("pdf") ){
    	myStyleSheet = "./stylePdf.css";
    } 
    else
    {
    	myStyleSheet = "./style.css";
    } 
    cssh = dh.openCssStyleSheet(myStyleSheet);
    dh.addCss(cssh);
    Mais comme expliqué plus haut, ça ne marche pas à 100%, quand j'exporte en pdf à partir du viewer, ça ne fait pas ce que je veux.

    Le seul truc qui marche à 100% mais qui n'est pas confortable si on a affaire à beaucoup de labels c'est le script ci- dessous à mettre dans le OnRender de chaque label de cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if( reportContext.getOutputFormat() == "pdf" )
     {this.getStyle().fontSize = "6px" ;} 
    else
     {this.getStyle().fontSize = "11px";
    }
    A vrai dire, je n'ai pas essayé ton idée Bim, mais j'aimerais bien que tu me files un bout de script permettant de modifier la css dans le OnRender.

    Merci bien !

  4. #4
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Dans la méthode onBeforeRender du rapport, j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    monStyle = reportContext.getDesignHandle().findStyle("StylePerso");
    if (reportContext.getOutputFormat().equalsIgnoreCase("pdf")) {
    	monStyle.setProperty(monStyle.COLOR_PROP, "Blue");
    	monStyle.setProperty(monStyle.FONT_SIZE_PROP, 20);
    }
    Mon style de base est normal sauf que la couleur de la police est rouge. Donc elle est rouge de taille normale sur tous les formats, sauf en PDF (elle est grande et bleue) !

    On peut faire la même chose avec un CSS mais je n'ai pas le temps de regarder. Le principe est le même en tout cas.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Merci BIM pour ta réactivité.

    j'ai appliqué ta solution en créant avant un style bidon. En fait ça a le même effet que mes solution d'avant, c'est à dire que ça ne marche toujours pas si on ouvre le rapport avec le viewer pour exporter ensuite en pdf. Si on ouvre direct en pdf ça marche mais c'est pas vraiment ce que je veux.

    Merci d'avoir essayé de m'aider, si tu as une autre idée je prends, sinon si je trouve de mon côté j'informerai même si j'ai quasiment perdu espoire parce que j'ai passé beaucoup de temps là-dessus.

    Merci bien !

  6. #6
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    C'est vrai que je n'ai pas essayé en passant par le viewer. Je vais tenter d'autres choses

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Salut Bim.

    Pas de nouvelle depuis ? Moi de mon côté, il n' ya rien pour le moment.
    Sinon, pourquoi il y a que toi qui a tenté de m'aider. Personne ne fait du Birt sur ce Forum, ça m'étonnerait ! Ou peut être que le problème est délicat, c'est ça ?

    Bref, à suivre ...

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/01/2009, 01h28
  2. [VBA] accéder aux données d'une table
    Par Schniko dans le forum VBA Access
    Réponses: 13
    Dernier message: 27/02/2008, 01h36
  3. [C#][AJAX] Accéder aux DropDownlist d'une table HTML
    Par actarus108 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 27/10/2006, 12h38
  4. Accéder aux Select d'une table HTML
    Par actarus108 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/10/2006, 17h11
  5. accéder aux colonnes d'une table différemment
    Par fab_hendrix dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/08/2005, 20h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo