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 :
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 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"); } }
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.
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) { } }
Donc voilà si vous avez une idée, ça serait sympa !
Merci à tous !
Partager