【问题标题】:Jasper Reports PDF Export - Displaying SVG image from embedded URLJasper 报告 PDF 导出 - 从嵌入的 URL 显示 SVG 图像
【发布时间】:2014-10-08 16:02:54
【问题描述】:

这是示例报告

<?xml version="1.0" encoding="UTF-8"?>
<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="sample" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="80b32d69-a3a5-4132-afef-37bc11966113">
<parameter name="img" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjQ0IiBoZWlnaHQ9IjgyIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNIDEgMzcgYyAwIC0wLjIxIC0wLjUyIC04LjEzIDAgLTEyIGMgMC43OSAtNS45NSAyLjMxIC0xMi42OCA0IC0xOCBjIDAuNDYgLTEuNDQgMS45IC0yLjkgMyAtNCBjIDAuOCAtMC44IDEuOTggLTEuODggMyAtMiBjIDMuOTYgLTAuNDcgOS40IC0wLjUgMTQgMCBjIDcuNjggMC44MyAxNS43NiAyLjM5IDIzIDQgYyAxLjM5IDAuMzEgMi44MyAxLjE0IDQgMiBjIDMuNzMgMi43MyA3Ljc4IDUuNzggMTEgOSBjIDEuOTUgMS45NSA0LjA2IDQuNjUgNSA3IGMgMC44OCAyLjIxIDAuMzkgNS41NiAxIDggYyAwLjM0IDEuMzUgMS44OCAyLjY3IDIgNCBjIDAuNDkgNS4zNSAxLjE5IDEyLjkgMCAxOCBjIC0wLjkyIDMuOTQgLTguNTYgMTAuMzggLTcgMTIgYyAzLjkyIDQuMDggMjEuMjUgOS43IDMyIDE0IGMgMi41NCAxLjAxIDUuMzUgMS43OCA4IDIgYyA1LjE1IDAuNDMgMTAuODQgMC43MiAxNiAwIGMgOC45MiAtMS4yNCAxOC4yIC0zLjY3IDI3IC02IGMgMi40MiAtMC42NCA0LjYxIC0yLjI1IDcgLTMgYyAyLjkgLTAuOTEgNi4yOSAtMC44MiA5IC0yIGMgNi45NyAtMy4wMiAxNC4yMSAtNy4wMiAyMSAtMTEgYyAyLjg2IC0xLjY4IDYuMDYgLTMuODYgOCAtNiBjIDEuMDUgLTEuMTUgMS44MSAtMy4zNSAyIC01IGMgMC40MyAtMy42NyAwLjc0IC04LjY3IDAgLTEyIGMgLTAuNDUgLTIgLTIuNDkgLTQuMTggLTQgLTYgYyAtMS43OCAtMi4xNCAtMy43OCAtNC42NCAtNiAtNiBjIC0zLjQgLTIuMDggLTguMDIgLTQuMTUgLTEyIC01IGMgLTQuOTEgLTEuMDUgLTEwLjkgLTAuMyAtMTYgLTEgYyAtMi4wMSAtMC4yNyAtNC4wNyAtMS45IC02IC0yIGMgLTQuMjkgLTAuMjEgLTkuMjYgMC41MyAtMTQgMSBjIC0yLjA2IDAuMjEgLTQuMTEgMC40MSAtNiAxIGMgLTMuMzUgMS4wNSAtNi41MiAyLjkyIC0xMCA0IGMgLTExLjc3IDMuNjYgLTI5LjQzIDcuMyAtMzUgMTAgYyAtMC45NyAwLjQ3IDEuMDcgNC41MiAyIDYgYyAwLjUzIDAuODQgMi4xNyAxLjE3IDMgMiBjIDYuMDEgNi4wMSAxMS41NiAxMy44MSAxOCAxOSBjIDUuMDcgNC4wOCAxMS44MiA3LjEgMTggMTAgYyA0LjQ3IDIuMDkgOS4yOSAzLjk3IDE0IDUgYyA1LjczIDEuMjUgMTEuNzQgMS4zNSAxOCAyIGMgMy44MiAwLjQgNy4yNSAwLjkyIDExIDEgYyAxMy4yNSAwLjI3IDI2LjcyIDEuMTIgMzkgMCBjIDUuMjggLTAuNDggMTAuOTMgLTMuMDcgMTYgLTUgYyAxLjc2IC0wLjY3IDMuODkgLTEuNjkgNSAtMyBjIDIuMjMgLTIuNjMgNC4zNSAtNi41NCA2IC0xMCBjIDEuNjUgLTMuNDcgMy4xMiAtNy40NyA0IC0xMSBjIDAuMzggLTEuNTEgLTAuMzQgLTMuNDUgMCAtNSBjIDAuOTMgLTQuMjEgMy4wNyAtOC43OSA0IC0xMyBsIDAgLTUiLz48L3N2Zz4="]]></defaultValueExpression>
</parameter>
<detail>
    <band height="125" splitType="Stretch">
        <image hAlign="Left" isUsingCache="true">
            <reportElement uuid="80c1fb9b-31c1-4755-941a-f100059e488d" x="11" y="10" width="522" height="83"/>
            <imageExpression><![CDATA[$P{img}]]></imageExpression>
        </image>
    </band>
</detail>
</jasperReport>

返回错误:

Byte data not found at : data:image/svg+xml;base64, ...

虽然在 PDF 中呈现,但仅适用于 HTML 导出。 正如一些帖子中所建议的,我尝试使用

net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.net.URL("data:..."))

但它也没有工作。

有人能建议一种方法,在所有类型的导出中显示嵌入的图像吗?

【问题讨论】:

    标签: svg jasper-reports export-to-pdf


    【解决方案1】:

    我终于解决了在 Jasper PDF 报告中嵌入 SVG 的问题。

    使用不带data:image/svg+xml;base64 的原始 SVG 图像数据。

    使用net.sf.jasperreports.renderers.BatikRenderer 渲染 SVG 图像。包含此类的 Maven 依赖项如下:

    <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-bridge</artifactId>
        <version>1.7</version>
    </dependency>
    

    使用完全限定的类名org.apache.commons.codec.binary.Base64 而不是Base64。包含此类的 Maven 依赖项如下:

    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.10</version>
    </dependency>
    

    Jasper jrxml 看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <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="sample" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="80b32d69-a3a5-4132-afef-37bc11966113">
    <parameter name="img" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjQ0IiBoZWlnaHQ9IjgyIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNIDEgMzcgYyAwIC0wLjIxIC0wLjUyIC04LjEzIDAgLTEyIGMgMC43OSAtNS45NSAyLjMxIC0xMi42OCA0IC0xOCBjIDAuNDYgLTEuNDQgMS45IC0yLjkgMyAtNCBjIDAuOCAtMC44IDEuOTggLTEuODggMyAtMiBjIDMuOTYgLTAuNDcgOS40IC0wLjUgMTQgMCBjIDcuNjggMC44MyAxNS43NiAyLjM5IDIzIDQgYyAxLjM5IDAuMzEgMi44MyAxLjE0IDQgMiBjIDMuNzMgMi43MyA3Ljc4IDUuNzggMTEgOSBjIDEuOTUgMS45NSA0LjA2IDQuNjUgNSA3IGMgMC44OCAyLjIxIDAuMzkgNS41NiAxIDggYyAwLjM0IDEuMzUgMS44OCAyLjY3IDIgNCBjIDAuNDkgNS4zNSAxLjE5IDEyLjkgMCAxOCBjIC0wLjkyIDMuOTQgLTguNTYgMTAuMzggLTcgMTIgYyAzLjkyIDQuMDggMjEuMjUgOS43IDMyIDE0IGMgMi41NCAxLjAxIDUuMzUgMS43OCA4IDIgYyA1LjE1IDAuNDMgMTAuODQgMC43MiAxNiAwIGMgOC45MiAtMS4yNCAxOC4yIC0zLjY3IDI3IC02IGMgMi40MiAtMC42NCA0LjYxIC0yLjI1IDcgLTMgYyAyLjkgLTAuOTEgNi4yOSAtMC44MiA5IC0yIGMgNi45NyAtMy4wMiAxNC4yMSAtNy4wMiAyMSAtMTEgYyAyLjg2IC0xLjY4IDYuMDYgLTMuODYgOCAtNiBjIDEuMDUgLTEuMTUgMS44MSAtMy4zNSAyIC01IGMgMC40MyAtMy42NyAwLjc0IC04LjY3IDAgLTEyIGMgLTAuNDUgLTIgLTIuNDkgLTQuMTggLTQgLTYgYyAtMS43OCAtMi4xNCAtMy43OCAtNC42NCAtNiAtNiBjIC0zLjQgLTIuMDggLTguMDIgLTQuMTUgLTEyIC01IGMgLTQuOTEgLTEuMDUgLTEwLjkgLTAuMyAtMTYgLTEgYyAtMi4wMSAtMC4yNyAtNC4wNyAtMS45IC02IC0yIGMgLTQuMjkgLTAuMjEgLTkuMjYgMC41MyAtMTQgMSBjIC0yLjA2IDAuMjEgLTQuMTEgMC40MSAtNiAxIGMgLTMuMzUgMS4wNSAtNi41MiAyLjkyIC0xMCA0IGMgLTExLjc3IDMuNjYgLTI5LjQzIDcuMyAtMzUgMTAgYyAtMC45NyAwLjQ3IDEuMDcgNC41MiAyIDYgYyAwLjUzIDAuODQgMi4xNyAxLjE3IDMgMiBjIDYuMDEgNi4wMSAxMS41NiAxMy44MSAxOCAxOSBjIDUuMDcgNC4wOCAxMS44MiA3LjEgMTggMTAgYyA0LjQ3IDIuMDkgOS4yOSAzLjk3IDE0IDUgYyA1LjczIDEuMjUgMTEuNzQgMS4zNSAxOCAyIGMgMy44MiAwLjQgNy4yNSAwLjkyIDExIDEgYyAxMy4yNSAwLjI3IDI2LjcyIDEuMTIgMzkgMCBjIDUuMjggLTAuNDggMTAuOTMgLTMuMDcgMTYgLTUgYyAxLjc2IC0wLjY3IDMuODkgLTEuNjkgNSAtMyBjIDIuMjMgLTIuNjMgNC4zNSAtNi41NCA2IC0xMCBjIDEuNjUgLTMuNDcgMy4xMiAtNy40NyA0IC0xMSBjIDAuMzggLTEuNTEgLTAuMzQgLTMuNDUgMCAtNSBjIDAuOTMgLTQuMjEgMy4wNyAtOC43OSA0IC0xMyBsIDAgLTUiLz48L3N2Zz4="]]></defaultValueExpression>
    </parameter>
    <detail>
        <band height="125" splitType="Stretch">
            <image hAlign="Left" isUsingCache="true">
                <reportElement uuid="80c1fb9b-31c1-4755-941a-f100059e488d" x="11" y="10" width="522" height="83"/>
                <imageExpression><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstance(new org.apache.commons.codec.binary.Base64().decodeBase64($P{img}))]]></imageExpression>
            </image>
        </band>
    </detail>
    </jasperReport>
    

    【讨论】:

      【解决方案2】:

      我没有用 svg 尝试过,但我用 png 图像让它工作。 您必须添加导入 org.apache.commons.codec.binary.Base64 并且应该从 base64 编码数据中删除 Header:data:image/svg+xml;base64,

      现在您可以使用以下表达式解码和传递数据:new ByteArrayInputStream(new Base64().decodeBase64($P{logo}.getBytes("UTF-8")))

      在您的情况下,它应该如下所示:

      <?xml version="1.0" encoding="UTF-8"?>
      <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="sample" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="80b32d69-a3a5-4132-afef-37bc11966113">
      <import value="org.apache.commons.codec.binary.Base64"/>
      <parameter name="img" class="java.lang.String" isForPrompting="false">
          <defaultValueExpression><![CDATA["PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjQ0IiBoZWlnaHQ9IjgyIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNIDEgMzcgYyAwIC0wLjIxIC0wLjUyIC04LjEzIDAgLTEyIGMgMC43OSAtNS45NSAyLjMxIC0xMi42OCA0IC0xOCBjIDAuNDYgLTEuNDQgMS45IC0yLjkgMyAtNCBjIDAuOCAtMC44IDEuOTggLTEuODggMyAtMiBjIDMuOTYgLTAuNDcgOS40IC0wLjUgMTQgMCBjIDcuNjggMC44MyAxNS43NiAyLjM5IDIzIDQgYyAxLjM5IDAuMzEgMi44MyAxLjE0IDQgMiBjIDMuNzMgMi43MyA3Ljc4IDUuNzggMTEgOSBjIDEuOTUgMS45NSA0LjA2IDQuNjUgNSA3IGMgMC44OCAyLjIxIDAuMzkgNS41NiAxIDggYyAwLjM0IDEuMzUgMS44OCAyLjY3IDIgNCBjIDAuNDkgNS4zNSAxLjE5IDEyLjkgMCAxOCBjIC0wLjkyIDMuOTQgLTguNTYgMTAuMzggLTcgMTIgYyAzLjkyIDQuMDggMjEuMjUgOS43IDMyIDE0IGMgMi41NCAxLjAxIDUuMzUgMS43OCA4IDIgYyA1LjE1IDAuNDMgMTAuODQgMC43MiAxNiAwIGMgOC45MiAtMS4yNCAxOC4yIC0zLjY3IDI3IC02IGMgMi40MiAtMC42NCA0LjYxIC0yLjI1IDcgLTMgYyAyLjkgLTAuOTEgNi4yOSAtMC44MiA5IC0yIGMgNi45NyAtMy4wMiAxNC4yMSAtNy4wMiAyMSAtMTEgYyAyLjg2IC0xLjY4IDYuMDYgLTMuODYgOCAtNiBjIDEuMDUgLTEuMTUgMS44MSAtMy4zNSAyIC01IGMgMC40MyAtMy42NyAwLjc0IC04LjY3IDAgLTEyIGMgLTAuNDUgLTIgLTIuNDkgLTQuMTggLTQgLTYgYyAtMS43OCAtMi4xNCAtMy43OCAtNC42NCAtNiAtNiBjIC0zLjQgLTIuMDggLTguMDIgLTQuMTUgLTEyIC01IGMgLTQuOTEgLTEuMDUgLTEwLjkgLTAuMyAtMTYgLTEgYyAtMi4wMSAtMC4yNyAtNC4wNyAtMS45IC02IC0yIGMgLTQuMjkgLTAuMjEgLTkuMjYgMC41MyAtMTQgMSBjIC0yLjA2IDAuMjEgLTQuMTEgMC40MSAtNiAxIGMgLTMuMzUgMS4wNSAtNi41MiAyLjkyIC0xMCA0IGMgLTExLjc3IDMuNjYgLTI5LjQzIDcuMyAtMzUgMTAgYyAtMC45NyAwLjQ3IDEuMDcgNC41MiAyIDYgYyAwLjUzIDAuODQgMi4xNyAxLjE3IDMgMiBjIDYuMDEgNi4wMSAxMS41NiAxMy44MSAxOCAxOSBjIDUuMDcgNC4wOCAxMS44MiA3LjEgMTggMTAgYyA0LjQ3IDIuMDkgOS4yOSAzLjk3IDE0IDUgYyA1LjczIDEuMjUgMTEuNzQgMS4zNSAxOCAyIGMgMy44MiAwLjQgNy4yNSAwLjkyIDExIDEgYyAxMy4yNSAwLjI3IDI2LjcyIDEuMTIgMzkgMCBjIDUuMjggLTAuNDggMTAuOTMgLTMuMDcgMTYgLTUgYyAxLjc2IC0wLjY3IDMuODkgLTEuNjkgNSAtMyBjIDIuMjMgLTIuNjMgNC4zNSAtNi41NCA2IC0xMCBjIDEuNjUgLTMuNDcgMy4xMiAtNy40NyA0IC0xMSBjIDAuMzggLTEuNTEgLTAuMzQgLTMuNDUgMCAtNSBjIDAuOTMgLTQuMjEgMy4wNyAtOC43OSA0IC0xMyBsIDAgLTUiLz48L3N2Zz4="]]></defaultValueExpression>
      </parameter>
      <detail>
          <band height="125" splitType="Stretch">
              <image hAlign="Left" isUsingCache="true">
                  <reportElement uuid="80c1fb9b-31c1-4755-941a-f100059e488d" x="11" y="10" width="522" height="83"/>
                  <imageExpression><![CDATA[new ByteArrayInputStream(new Base64().decodeBase64($P{img}.getBytes("UTF-8")))]]></imageExpression>
              </image>
          </band>
      </detail>
      </jasperReport>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多