java - 如何为静态文本应用样式类?

标签 java jasper-reports

我在导出报告时通过 JRHtmlExporterParameter.HTML_HEADER 注入(inject)样式类。 在 jrxml 文件中,我已将字段的样式名称设置为 NonPrintable,该名称可在 html header 中使用。但在填充报告 jasper 时,会引发以下异常。

net.sf.jasperreports.engine.JRRuntimeException: Could not resolve style(s): NonPrintable
at net.sf.jasperreports.engine.fill.JRFillObjectFactory.checkUnresolvedReferences(JRFillObjectFactory.java:1577)
at net.sf.jasperreports.engine.fill.JRFillObjectFactory.setStyles(JRFillObjectFactory.java:1504)
at net.sf.jasperreports.engine.fill.JRBaseFiller.loadStyles(JRBaseFiller.java:1000)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:879)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:569)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915)
at com.echain.ireportapp.ReportGenerator.generateHtml(ReportGenerator.java:153)
at com.echain.ireportapp.ReportGenerator.generateReport(ReportGenerator.java:47)
at com.echain.ireportapp.IReportForm.generateReport(IReportForm.java:329)
at com.echain.ireportapp.IReportForm.runMouseClicked(IReportForm.java:66)
at com.echain.ireportapp.IReportForm.access$2(IReportForm.java:63)
at com.echain.ireportapp.IReportForm$4.mouseClicked(IReportForm.java:140)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.Component.processMouseEvent(Component.java:6266)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

以下是我的 jrxml 示例

<textField isBlankWhenNull="true" hyperlinkType="LocalAnchor">
            <reportElement uuid="b292d262-c6af-46ed-99b7-af6335df205a" key="tfToHide" style="NonPrintable" x="852" y="0" width="100" height="19" forecolor="#192FC5"/>
            <textElement textAlignment="Right" verticalAlignment="Middle" markup="html">
                <font isBold="true"/>
            </textElement>
            <textFieldExpression><![CDATA["Bottom"]]></textFieldExpression>
            <anchorNameExpression><![CDATA["Top"]]></anchorNameExpression>
            <hyperlinkAnchorExpression><![CDATA["Bottom"]]></hyperlinkAnchorExpression>
        </textField>
        <textField isBlankWhenNull="true" hyperlinkType="Reference">
            <reportElement uuid="b292d262-c6af-46ed-99b7-af6335df205a" key="tfToHide" style="NonPrintable" x="0" y="0" width="100" height="19" forecolor="#192FC5"/>
            <textElement textAlignment="Left" verticalAlignment="Middle" markup="html">
                <font isBold="true"/>
            </textElement>
            <textFieldExpression><![CDATA["Back"]]></textFieldExpression>
            <hyperlinkReferenceExpression><![CDATA[$F{REQUESTEDURL}]]></hyperlinkReferenceExpression>
        </textField>

以下是导出器设置

exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "<style type=\"text/css\" media=\"print\">"
                    + ".NonPrintable{display: none;}</style>");

我在设计部分/导出部分遗漏了一些东西吗? 请建议我获得结果。

最佳答案

为要设置样式类的每个字段添加以下属性

net.sf.jasperreports.export.html.class

以上键的值是您的样式类名称。 在上面的问题中,我提到类名称为“NonPrintable”。因此上述键的值为 NonPrintable

enter image description here

关于java - 如何为静态文本应用样式类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21796883/

相关文章:

java - Jsoup 使用 select 时忽略嵌套标签

java - 如何使用 Android Selector 更改 PopupMenu 中的项目颜色?

java - 如何为没有 build.xml 或 pom.xml 的项目构建 jar

jasper-reports - 如何在 Jasper Report 中组织框架,使其完美 float ?

jasper-reports - 一份报告中的多个部分

java - 当路径指向 JAR 文件内时将 SUBREPORT_DIR 传递给子报告 [Jasper Reports 4.5]

java - 如何将 Typesafe Stack deb repo 与 Oracle Java 6 而不是 OpenJDK 一起使用?

java - 使用 Shade-Plugin 正确最小化 Uber Jar

java - 在 Jasper Reports 中迭代 JRBeanCollectionDataSource 时如何获取当前 bean?

jasper-reports - 如何在交叉表中传递参数?