如何从Jasper Report(.jrxml)引用.jrtx模板文件?

时间:2016-08-29 22:52:30

标签: jasper-reports jasperserver

我正在使用this example将jasper模板应用于jasper报告。我无法找到如何从.jrxml文件中引用jasper模板。 .jrxml文件和.jrtx文件位于同一位置。在Jasper中,我使用以下语法引用模板。

<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="QCReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20"
              topMargin="20" bottomMargin="20" uuid="0ea707c5-78f5-4f37-a065-a228202cb59e">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <import value="org.apache.commons.lang.StringUtils"/>
    ..
    <template><![CDATA["JasperCustomStyle.jrtx"]]></template>
    ..

但它给了我Byte data not found at: JasperCustomStyle.jrtx.例外。有人可以帮我弄清楚如何从.jrxml文件中引用jasper模板吗?

详细例外

Caused by: net.sf.jasperreports.engine.JRException: Byte data not found at: JasperCustomStyle.jrtx.
    at net.sf.jasperreports.repo.RepositoryUtil.getBytesFromLocation(RepositoryUtil.java:210)
    at net.sf.jasperreports.engine.xml.JRXmlTemplateLoader.loadTemplate(JRXmlTemplateLoader.java:106)
    at net.sf.jasperreports.engine.fill.JRFillReportTemplate.loadTemplate(JRFillReportTemplate.java:111)
    at net.sf.jasperreports.engine.fill.JRFillReportTemplate.evaluate(JRFillReportTemplate.java:89)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.collectTemplates(JRBaseFiller.java:740)

jrtx文件如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperTemplate PUBLIC "-//JasperReports//DTD Template//EN" "http://jasperreports.sourceforge.net/dtds/jaspertemplate.dtd">

<jasperTemplate>
    <style name="New style" mode="Opaque" forecolor="#000000" backcolor="#FFC800" fill="Solid" hAlign="Center" vAlign="Middle" isBold="true" isUnderline="true">
        <box>
            <topPen lineWidth="1.0"/>
            <leftPen lineWidth="1.0"/>
            <bottomPen lineWidth="1.0"/>
            <rightPen lineWidth="1.0"/>
        </box>
    </style>
</jasperTemplate>

2 个答案:

答案 0 :(得分:5)

Caused by: net.sf.jasperreports.engine.JRException: Byte data not found at: JasperCustomStyle.jrtx.

表示模板无法找到

您需要传递正确的路径以便jasper可以找到该文件,这通常通过使用参数来完成

示例

<template>$P{templateLocation} + "JasperCustomStyle.jrtx"</template>
<parameter name="templateLocation"/>

要参数templateLocation,您传递包含模板的文件夹的绝对位置(包括最终/

或URL(在网络应用程序中)

<template class="java.net.URL">$P{templateURL}</template>
<parameter name="templateURL" class="java.net.URL"/>

要将templateURL传递给模板,在Web应用程序中,您还可以轻松检查模板是否可用,将相同的URL传递给浏览器

答案 1 :(得分:0)

任何人都想知道解决方案,从Jasper studio 6.11.0开始,我们应该使用以下代码从外部源导入样式组件,以将其添加到jrxml文件中:

<template><![CDATA["http://linktomyStylesheet/Mystylesheet.jrtx"]]></template>