【问题标题】:How to refer to a .jrtx template file from Jasper Report (.jrxml)?如何从 Jasper Report (.jrxml) 中引用 .jrtx 模板文件?
【发布时间】:2017-01-06 01:56:53
【问题描述】:

我正在使用this example 将碧玉模板应用于碧玉报告。我无法找出如何从 .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 文件中引用碧玉模板吗?

详细异常

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>

【问题讨论】:

  • .jasper.jrxml.jrtx 文件的目录路径是什么?
  • .jrxml 和 .jrtx 文件位于 rootFolder/reports 文件夹中。我没有保存 .jasper 文件,它们保存在 JasperReport 对象中。

标签: jasper-reports jasperserver


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    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 将 URL 传递给模板,在 Web 应用程序中,您还可以轻松检查模板是否可用,将相同的 URL 传递给浏览器

    【讨论】:

    • 感谢您的回复。我可以在
    • 是的,设置 class="java.io.InputStream"
    • 在 jasperserver 应用程序中,您还应该能够使用相对路径作为 repo:templates/JasperCustomStyle.jrtx,但我个人总是更喜欢使用参数,以便可以根据需要从配置文件中设置应用程序。
    • 好的,我提供了模板作为 InputStream 对象,它似乎工作。谢谢。
    • 或者如果您不想要相对(来自模板)路径,您可以使用绝对路径(来自资源文件夹),如下所示:&lt;template&gt;&lt;![CDATA["repo:/bbb/styles.jrtx"]]&gt;&lt;/template&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2011-05-26
    相关资源
    最近更新 更多