2012-05-17 15 views
29

Sto usando il report jasper come strumento di segnalazione nella mia applicazione. E mi chiedo come posso avvolgere il lungo testo espandendo lo reportElement dinamicamente in direzione verticale (espandendo la dimensione della riga, non la larghezza della colonna). O c'è un modo per raggiungere questo obiettivo? Il mio approccio in basso sta troncando il lungo testo "Nome molto lungo". Potete darmi qualche suggerimento?JasperReport - avvolge il testo per mostrare il testo lungo nel campo di testo

uscita:

enter image description here

import java.io.File; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import net.sf.jasperreports.engine.JasperCompileManager; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JasperPrint; 
import net.sf.jasperreports.engine.JasperReport; 
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 
import net.sf.jasperreports.engine.design.JasperDesign; 
import net.sf.jasperreports.engine.xml.JRXmlLoader; 
import net.sf.jasperreports.view.JasperViewer; 

public class JrUtils { 
    public static void showJrReport(List objectList, String fileName, String title, Map parameters) { 
     try { 

      File f = new File(fileName); 
      JasperDesign jasperDesign = JRXmlLoader.load(f.getAbsolutePath()); 
      JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(objectList); 
      JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds); 
      JasperViewer jv = new JasperViewer(jasperPrint, false); 
      jv.setTitle(title); 
      jv.setVisible(true); 

     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
    } 

    public static void main(String[] args) { 
     List<Person> pList = new ArrayList<Person>(); 

     Person p1 = new Person(); 
     p1.setPersonName("Some Name "); 
     p1.setAddress("Nepal - Address Fits Here"); 

     Person p2 = new Person(); 
     p2.setPersonName("Some very long name"); 
     p2.setAddress("Nepal - Address Fits Here"); 

     pList.add(p1); 
     pList.add(p2); 

     showJrReport(pList, "testReport.jrxml", "Test Report", new HashMap<Object, Object>()); 
    } 

} 

Jasper Relazione jrxml di file - testReport.jrxml:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="250" pageHeight="400" columnWidth="210" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <property name="ireport.zoom" value="2.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="0"/> 
    <field name="personName" class="java.lang.String"/> 
    <field name="address" class="java.lang.String"/> 
    <columnHeader> 
     <band height="23" splitType="Stretch"> 
      <rectangle> 
       <reportElement x="0" y="0" width="88" height="23"/> 
      </rectangle> 
      <rectangle> 
       <reportElement x="88" y="0" width="122" height="23"/> 
      </rectangle> 
      <staticText> 
       <reportElement x="0" y="0" width="88" height="23"/> 
       <textElement textAlignment="Center" verticalAlignment="Middle"/> 
       <text><![CDATA[Name]]></text> 
      </staticText> 
      <staticText> 
       <reportElement x="88" y="0" width="122" height="23"/> 
       <textElement textAlignment="Center" verticalAlignment="Middle"/> 
       <text><![CDATA[Address]]></text> 
      </staticText> 
     </band> 
    </columnHeader> 
    <detail> 
     <band height="21" splitType="Stretch"> 
      <rectangle> 
       <reportElement x="0" y="0" width="88" height="21"/> 
      </rectangle> 
      <textField> 
       <reportElement x="0" y="0" width="88" height="21"/> 
       <textElement verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{personName}]]></textFieldExpression> 
      </textField> 
      <rectangle> 
       <reportElement x="88" y="0" width="122" height="21"/> 
      </rectangle> 
      <textField> 
       <reportElement x="88" y="0" width="122" height="21"/> 
       <textElement verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

risposta

54

mi sono trovato la risposta:

Ho effettuato alcune ricerche aggiuntive sulle proprietà dei componenti e rectangle. E ho scoperto che ho bisogno di impostare le seguenti proprietà.

Per rettangolo:

 <rectangle> 
      <reportElement stretchType="RelativeToBandHeight" ... /> 
     </rectangle> 

Per textField:

 <textField isStretchWithOverflow="true"> 
      ... 
     </textField> 

uscita come previsto:

enter image description here

La sezione <detail> ...</detail> dopo la correzione:

<detail> 
     <band height="21" splitType="Stretch"> 
      <rectangle> 
       <reportElement stretchType="RelativeToBandHeight" x="0" y="0" width="88" height="21"/> 
      </rectangle> 
      <textField isStretchWithOverflow="true"> 
       <reportElement x="2" y="0" width="84" height="21"/> 
       <textElement verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{personName}]]></textFieldExpression> 
      </textField> 
      <rectangle> 
       <reportElement stretchType="RelativeToBandHeight" x="88" y="0" width="122" height="21"/> 
      </rectangle> 
      <textField isStretchWithOverflow="true"> 
       <reportElement x="90" y="0" width="118" height="21"/> 
       <textElement verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 

UPDATE

È inoltre possibile impostare la proprietà net.sf.jasperreports.print.keep.full.text a true per conseguire tale attraverso i vostri tutti i rapporti.

+0

ma cosa succede se vogliamo abbassare gli altri elementi a causa di questo. Non sembra funzionare in questo caso –

+0

Può essere usato per il testo statico? – zygimantus

+0

Non ne sono sicuro. Potresti provare? – gtiwari333

6

Inoltre è possibile rendere elegante il troncamento utilizzando le seguenti proprietà impostate sul campo di testo. Controlla questo sample

net.sf.jasperreports.text.truncate.at.char 
net.sf.jasperreports.text.truncate.suffix 
net.sf.jasperreports.print.keep.full.text 
Problemi correlati