составление jrxml с помощью sciptlet с помощью ant - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь скомпилировать jrxml, используя ant. Я создал свой jrxml на iReports, поэтому у меня нет build.xml. При запуске команды ant он запрашивает build.xml. Я создал этот файл в том же репертуаре, что и мой jrxml, но я не знаю, что мне следует в него поместить, чтобы связать мой jrxml с моим jar скриптлетом Я буду умолять о твоей помощи, я как бы потерян ..

1 Ответ

1 голос
/ 06 декабря 2011

Вы можете скомпилировать шаблон отчета с помощью net.sf.jasperreports.ant.JRAntCompileTask ant задача.

Образец взят из здесь :

<path id="runClasspath">
    <pathelement location="${path_to_jasper_libs}"/>
    <pathelement path="${path_to_scriplet}\scriplet.jar"/>
</path>

<taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask"> 
  <classpath refid="classpath"/>
</taskdef>

<target name="compile1"> 
  <mkdir dir="./build/reports"/> 
  <jrc 
    srcdir="./reports"
    destdir="./build/reports"
    tempdir="./build/reports"
    keepjava="true"
    xmlvalidation="true">
   <classpath refid="runClasspath"/>
   <include name="**/*.jrxml"/>
  </jrc>
</target>

<target name="compile2">
  <mkdir dir="./build/reports"/> 
  <jrc 
    destdir="./build/reports"
    tempdir="./build/reports"
    keepjava="true"
    xmlvalidation="true">
   <src>
    <fileset dir="./reports">
     <include name="**/*.jrxml"/>
    </fileset>
   </src>
   <classpath refid="runClasspath"/>
  </jrc> 
</target> 

Цитата с сайта:

В дополнение к атрибутам srcdir и destdir, пользовательский jrc Задача Ant, поставляемая с JasperReports, поддерживает следующие атрибуты:

компилятор: имя класса, который реализует JRCompiler интерфейс, который будет использоваться для составления отчетов (необязательно). xmlvalidation: флаг, указывающий, следует ли проверять XML выполняется в файлах шаблонов исходного отчета (по умолчанию true). tempdir: место для хранения временно сгенерированных файлов ( текущий рабочий каталог по умолчанию). keepjava: флаг для указать, должны ли временные файлы Java, созданные на лету сохраняется и не удаляется автоматически (по умолчанию false).

Рабочий образец:

SampleJRScriptlet класс:

import com.google.common.base.Strings;
import net.sf.jasperreports.engine.JRDefaultScriptlet;

public class SampleJRScriptlet extends JRDefaultScriptlet {

    public String doubleField(String value) {
        return Strings.repeat(value, 2);
    }
}

Шаблон отчета для компиляции (файл report_with_scriplet.jrxml ):

<jasperReport ... scriptletClass="SampleJRScriptlet">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString language="xPath">
        <![CDATA[/Northwind/Customers]]>
    </queryString>
    <field name="CustomerID" class="java.lang.String">
        <fieldDescription><![CDATA[CustomerID]]></fieldDescription>
    </field>
    <field name="CompanyName" class="java.lang.String">
        <fieldDescription><![CDATA[CompanyName]]></fieldDescription>
    </field>
    <field name="ContactName" class="java.lang.String">
        <fieldDescription><![CDATA[ContactName]]></fieldDescription>
    </field>
    <field name="ContactTitle" class="java.lang.String">
        <fieldDescription><![CDATA[ContactTitle]]></fieldDescription>
    </field>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{REPORT_SCRIPTLET}.doubleField("$F{CustomerID}")]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{CompanyName}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="200" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ContactName}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="300" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ContactTitle}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

Мой скрипт муравья (файл compile_report.xml ):

<project default="compile" basedir=".">
    <path id="classpath">
        <fileset dir="./../../target/alternateLocation">
            <include name="jasperreports-4.1.2.jar"/>
            <include name="commons-logging-1.0.2.jar"/>
            <include name="commons-digester-1.7.jar"/>
            <include name="commons-collections-2.1.jar"/>
            <include name="commons-beanutils-1.8.0.jar"/>
            <include name="groovy-all-1.0-jsr-05.jar"/>
        </fileset> 
    </path>

    <path id="runClasspath">
        <path refid="classpath"/> 
        <pathelement path="./../../target/myscriplet.jar"/>
    </path>

    <taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask"> 
        <classpath refid="classpath"/>
    </taskdef>

    <target name="compile">
        <mkdir dir="./compiled_jasper"/> 
        <jrc 
    destdir="./compiled_jasper"
    tempdir="./compiled_jasper"
    keepjava="true"
    xmlvalidation="true">
            <src>
                <fileset dir="./report">
                    <include name="**/*.jrxml"/>
                </fileset>
            </src>
            <classpath refid="runClasspath"/>
        </jrc> 
    </target> 
</project>

Структура папок:

report
  report_with_scriplet.jrxml
compile_report.xml

После запуска скрипта структура папок будет:

report
  report_with_scriplet.jrxml
compiled_jasper
  report_with_scriplet_1323195663885_780040.groovy
  report_with_scriplet.jasper
compile_report.xml
...