Подтвердить что ты не робот

Как скрыть textField для указанного экспортера. Например, для не HTML

У меня есть jsxml файл JasperReports, который имеет гиперссылку внутри элемента textField.

Я не хочу показывать эту гиперссылку ни в чем, кроме HTML-представления, потому что ссылка не работает в excel, PDF, word и т.д. и не имеет смысла показывать.

Я прочитал faq со свойствами, но это просто смутило меня, потому что он не говорит о том, что скрывает текстовый экран вообще, просто "полосы" для верхних и нижних колонтитулов.

Вот текстовое поле, которое я хочу скрыть, если не 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>
4b9b3361

Ответ 1

Используйте Фильтр элементов.

Цитата из руководства JR Ultimate:

Эта встроенная реализация фильтра исключает из элементов экспорта, которые соответствуют данному ключу элемента.
Клавиши элементов устанавливаются во время разработки отчета и распространяются в сгенерированные отчеты.
Каждый элемент в заполненном отчете имеет тот же ключ, что и элемент из шаблона отчета, который сгенерировал его.
Чтобы инициировать фильтр ключа элемента, разработчику отчета необходимо определить одно или несколько свойств отчета, начинающихся с <exporter_property_prefix > .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.


Например, рассмотрите отчет с логотипом, который должен быть включен как SVG для вывода PDF или PNG для вывода HTML. Файл 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>

Чтобы исключить SVG из HTML и PNG из PDF, добавьте следующие свойства сразу после корневого элемента <jasperReport...> в файле JRXML:

<property name="net.sf.jasperreports.export.html.exclude.key.IMAGE_LOGO_SVG"/>
<property name="net.sf.jasperreports.export.pdf.exclude.key.IMAGE_LOGO_PNG"/>

Ответ 2

Посмотрев на ваш источник, может быть возможно создать ExporterFilter, который подавляет гиперссылки, а затем вы должны добавить этот фильтр в процесс экспорта для всего, кроме HTML. Однако я не понимаю, почему вы не хотите показывать гиперссылку в других форматах. На протяжении многих лет PDF, Word, Excel и т.д. Все правильно интерпретируют гиперссылку и на самом деле отвечают на щелчок мышью по ссылке, как браузер. Вероятно, поэтому процесс будет болезненным: вы меняете то, что ожидается для большинства людей.