Bonjour à tous !
Je reviens après quelques semaines avec une nouvelle question sur la génération de documents avec FOP.
J'ai donc écris un fichier XSL qui parse mes fichiers XML pour pouvoir générer des documents RTF.
Or j'ai quelques soucis de consommation mémoire (je monte à 230Mo pour générer un document de 186pages contenant 38 tests), j'ai donc tenté d'optimiser mon code.
J'ai créé plusieurs page-sequence : un pour chaque test. Sachant que chaque test contient un ou plusieurs tableau de valeurs.
Mais cela n'a eu aucune incidence sur les performances... :/ Je pense donc avoir merdouillé quelque part.
En élagant mon code, je me suis rendu compte que l'utilisation excessive de ressource vient des tableaux. C'est pas étonnant en soit, vu que 99% des informations sont contenues à l'intérieur, mais la différence de traitement est impressionnante ! (5 sec et 30Mo d'utilisé pour afficher les données directement sur la page / 1min15 et 230Mo dès que je tente de les insérer dans un tableau)
Ma méthode de construction du XSL est-elle mauvaise? Car j'ai beau avoir enlevé le sommaire, les page-number-citation et les différentes références, j'arrive toujours avec un XSL très difficilement utilisable au vu des performances.
Merci d'avance
Voici une version simplifiée de mon XSL, les parties n'étant pas présentes ne jouant pas de manière importante sur les performances finales:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 <!-- Transformation tool from XML file to PDF or RTF document --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="document"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <!-- Description of each page setting of the document--> <fo:layout-master-set> <fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm" margin-top="1.5cm" margin-bottom="1.5cm" margin-left="2.5cm" margin-right="2.5cm"> <fo:region-body margin-top="1.5cm" margin-bottom="1.5cm"/> <fo:region-before extent="1.5cm"/> <fo:region-after extent="1.5cm"/> </fo:simple-page-master> </fo:layout-master-set> <!--************** data of the document pages *****************--> <xsl:for-each select="test"> <fo:page-sequence master-reference="simple"> <fo:flow flow-name="xsl-region-body" font-family="Times" font-size="10pt"> <!-- Test display --> <fo:block space-after="15pt" border-spacing="3pt"> <!-- Title of the test --> <fo:block><xsl:value-of select="@title"/></fo:block> <!-- data tab display --> <fo:block>Tabs of values</fo:block> <xsl:for-each select="tab"> <fo:block space-before="10pt" space-after="10pt"> <!-- condition tab --> <fo:block><xsl:value-of select="@title"/> </fo:block> <fo:table width="100%"> <!-- calculation of the size of one column : 16 cm / number of columns --> <xsl:variable name="column_nb" select="count(line[position()=1]/cell)"/> <xsl:variable name="column_size" select="16 div number($column_nb)"/> <xsl:for-each select="line[position()=1]/cell"> <fo:table-column column-width= "{$column_size}cm"/> </xsl:for-each> <!-- column names --> <xsl:if test="column"> <fo:table-header> <fo:table-row > <xsl:for-each select="column"> <fo:table-cell><fo:block> <fo:block><xsl:value-of select="@column_name"/></fo:block> <xsl:if test="@scale"><fo:block>(<xsl:value-of select="@scale"/>)</fo:block></xsl:if> </fo:block></fo:table-cell> </xsl:for-each> </fo:table-row> </fo:table-header> </xsl:if> <!-- data of the tab --> <fo:table-body> <xsl:for-each select="line"> <fo:table-row> <xsl:for-each select="cell"> <fo:table-cell><fo:block><xsl:value-of select="@value"/></fo:block></fo:table-cell> </xsl:for-each> </fo:table-row> </xsl:for-each> </fo:table-body> </fo:table> </fo:block> </xsl:for-each> </fo:block> </fo:flow> </fo:page-sequence> </xsl:for-each> </fo:root> </xsl:template> </xsl:stylesheet>
Partager