我有一个 JasperReports jrxml 文件,该文件在textField元素中有一个超链接。
我不想在除HTML视图之外的任何内容中显示此超链接,因为该链接在excel,PDF,word等中不起作用,并且无法显示。
我已经阅读了带有属性的faq,但它让我感到困惑,因为它根本没有谈到隐藏 textField ,只是为了页眉和页脚的“乐队”。
这是我想要隐藏的文本字段,而不是HTML:
<textField hyperlinkType="ReportExecution">
<reportElement style="Report_Param_Value_Link" mode="Opaque" x="400" y="0" width="161" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[Boolean.TRUE.equals($P{LAST_WEEK}) ? "View WTD" : "View last week"]]></textFieldExpression>
<hyperlinkParameter name="noMenu">
<hyperlinkParameterExpression><![CDATA["true"]]></hyperlinkParameterExpression>
</hyperlinkParameter>
<hyperlinkParameter name="reportUnit">
<hyperlinkParameterExpression><![CDATA["repo:/Reports/Operations/Business_Support/Subreports/Business_Support_Performance_Dashboard"]]></hyperlinkParameterExpression>
</hyperlinkParameter>
<hyperlinkParameter name="LAST_WEEK">
<hyperlinkParameterExpression><![CDATA[Boolean.valueOf(!Boolean.TRUE.equals($P{LAST_WEEK})).toString()]]></hyperlinkParameterExpression>
</hyperlinkParameter>
</textField>
答案 0 :(得分:14)
使用 元素密钥过滤器 。
来自 JR Ultimate Guide 的引用:
此内置过滤器实现从与给定元素键匹配的导出元素中排除 元素键在报告设计时设置,并传播到生成的报告中 已填充报表中的每个元素与生成它的报表模板中的元素具有相同的键 要触发元素键过滤器,报表设计者需要定义一个或多个以 &lt; exporter_property_prefix&gt; .exclude.key 开头的报表属性。每个这样的属性匹配单个元素键,该元素键将被过滤器排除。元素键由属性值给出,或者如果没有为属性设置值,则由属性后缀给出 以下示例显示如何指定要从特定导出输出中排除的元素键:
<jasperReport ...>
<!-- exclude elements with keys Image1 and Text4 from HTML export-->
<property name="net.sf.jasperreports.export.html.exclude.key.Image1"/>
<property name="net.sf.jasperreports.export.html.exclude.key.Text4"/>
<!-- exclude elements with keys Image5 from PDF export -->
<property name="net.sf.jasperreports.export.pdf.exclude.key.the.image" value=”Image5”/>
...
</jasperReport>
在您的情况下,您应该为带有超链接的文本字段添加键(例如,textFieldWithHL
),然后为您想要的每种格式(pdf,docx,xls,csv,xml,txt,odt)添加一个属性从打印此超链接中排除:
<property name="net.sf.jasperreports.export.pdf.exclude.key.textFieldWithHL"/>
<property name="net.sf.jasperreports.export.docx.exclude.key.textFieldWithHL"/>
<property name="net.sf.jasperreports.export.xls.exclude.key.textFieldWithHL"/>
<property name="net.sf.jasperreports.export.csv.exclude.key.textFieldWithHL"/>
<property name="net.sf.jasperreports.export.xml.exclude.key.textFieldWithHL"/>
你帖子中的表达:
net.sf.jasperreports.export.{format}.exclude.origin.{suffix}.{arbitrary_name}
net.sf.jasperreports.export.{format}.exclude.origin.keep.first.{suffix}.{arbitrary_name}
允许排除整个bands
(也是group bands
)。此过滤器适用于JROrigin个对象。
例如,考虑带有徽标的报告,该徽标必须包含为PDF输出的SVG或HTML输出的PNG。 JRXML文件包含:
<image scaleImage="RetainShape" onErrorType="Blank">
<reportElement key="IMAGE_LOGO_PNG" x="1" y="0" width="100" height="60" uuid="a896cade-f6fc-4d8f-b762-29b950309257"/>
<imageExpression><![CDATA[Transcoder.asPNG($V{V_LOGO_FILE} + ".svg")]]></imageExpression>
</image>
<image scaleImage="RetainShape" onErrorType="Blank">
<reportElement key="IMAGE_LOGO_SVG" x="1" y="0" width="100" height="60" uuid="a896cade-f6fc-4d8f-b762-29b950309257"/>
<imageExpression><![CDATA[Transcoder.asSVG($V{V_LOGO_FILE} + ".svg")]]></imageExpression>
</image>
要从HTML中排除SVG并从PDF中排除PNG,请在JRXML文件中的<jasperReport...>
根元素后立即添加以下属性:
<property name="net.sf.jasperreports.export.html.exclude.key.IMAGE_LOGO_SVG"/>
<property name="net.sf.jasperreports.export.pdf.exclude.key.IMAGE_LOGO_PNG"/>
答案 1 :(得分:1)
查看您的源代码,可能可以创建一个禁止超链接的ExporterFilter,然后您必须将该过滤器添加到除 HTML之外的所有内容的导出过程中。但是,我不明白为什么你不想以其他格式显示超链接。多年来,PDF,Word,Excel等都会正确地解释超链接,实际上就像浏览器一样点击链接上的鼠标。这可能就是为什么这个过程会让人痛苦的原因:你正在扭转大多数人的预期行为。