2008-11-18 12 views
5

J'ai quelques rapports Jasper qui sont affichés au format HTML. Je voudrais que la largeur des colonnes dans les tableaux HTML soit automatiquement redimensionnée pour correspondre au contenu de la cellule la plus large (dans cette colonne), de sorte que toutes les données soient affichées.Largeur de cellule de colonne dynamique

Actuellement cela ne se produit pas parce que le code HTML généré par Jasper spécifie les largeurs fixes pour la table < > et certains <td> éléments, par exemple

<td style="width: 20px; height: 17px;"> 
    <span style="font-family: Arial; font-size: 11px;">[email protected]</span> 
</td> 

Je ne peux pas simplement supprimer toutes ces propriétés de largeur (en utilisant JavaScript), parce que (comme indiqué dans le code HTML ci-dessus) toutes les données qui seraient cachées lors de l'utilisation de ces largeurs est même pas retourné au côté client

Cheers, Don

+0

Avez-vous essayé d'utiliser [iReport] (http://jasperforge.org/plugins/project/project_home.php?group_id=83). C'est un IDE pour écrire JasperReports. Cela pourrait rendre votre vie plus simple. – Tom

+0

J'ai le même problème. Si vous voulez que les colonnes soient réparties uniformément sur la largeur disponible, ce n'est pas possible. Dans Jasper Stuido, lorsque vous créez une table avec 10 colonnes, elle place les colonnes dans une zone minuscule d'une largeur de 22px. Vous devez ensuite éditer chaque cellule et modifier manuellement la largeur à une valeur que vous calculez - cela prend des heures. Puis quand vous voulez le changer .. pour cette raison, je n'utilise plus jamais de tables. J'utilise des sous-rapports pour à peu près tout, car vous pouvez changer leur largeur en les faisant glisser. –

Répondre

4

Bien qu'imparfaite, vous pouvez signaler le champ d'étirer avec trop-plein. Cela vous donnerait au moins toutes les données. Dans votre fichier jrxml serait similaire à:

<textField isStretchWithOverflow="true" hyperlinkType="None"> 
<reportElement style="Report Sub-Title" x="0" y="84" width="802" height="20"/> 
<textElement/> 
<textFieldExpression class="java.lang.String"><![CDATA["For the period ...]]></textFieldExpression> 
</textField> 

Je crains que je ne connais aucune caractéristique de Jasper rapports qui permettrait le redimensionnement dynamique de la largeur des colonnes - Il est probablement l'une de ces choses qui est logique pour HTML mais peu de sens pour d'autres formats de sortie tels que PDF.

+0

D'accord avec Jamie Love. Mais j'appliquerais sa suggestion sur la balise columnHeader, pour que la propriété s'applique à toute la colonne. –

+0

Génial, merci !! J'ai trouvé que lorsque la colonne s'étire pour s'adapter au contenu, il n'y a pas de rembourrage à côté de la colonne adjacente. L'ajout de '' dans l'élément 'textField' a corrigé ce problème comme suggéré par [cette réponse SO] (http://stackoverflow.com/a/14284593/848668) – br3nt

-2

Dans iReport, il existe une option appelée "Stretch Type". Sélectionnez "Relative to Band Height" (hauteur relative de la bande)

+3

@Carlos: Cela va provoquer l'étirement de la cellule en hauteur, pas en largeur. –

3

Les développeurs ont délibérément décidé de ne pas laisser la largeur des cellules s'étirer. Pour que les colonnes changent de largeur en fonction du contenu, cela doit être fait par programmation. Un outil utile: DynamicJasper.

DynamicJasper crée des rapports dynamiquement, la définition à l'exécution des colonnes, la largeur des colonnes (largeur auto), groupes, les variables, les polices, les graphiques, tableaux croisés, des sous-rapports (qui peuvent aussi être dynamique), la page taille et tout d'autre que vous pouvez définir au design fois.

+0

Désolé, mais comment le faites-vous dans le DynamicJasper? Je sème que le 'addColumn' dans le 'FastReportBuilder' demande la valeur _int_ pour la largeur –