如何在iReport中嵌入和显示SVG图像

5
我正在使用iReport 4.5.0,并希望嵌入SVG图像以生成PDF文件。当使用iReport的预览选项运行报告时,该图像不会呈现在PDF上(即图像应该出现的地方有一个空白区域)。我在执行过程中没有看到任何日志中的异常,发生了什么事情?以下是图像标记代码片段:
<?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="reportSVGTest" language="groovy" pageWidth="595" 
        pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" 
        topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="50">
            <staticText>
                <reportElement x="81" y="13" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[Hello]]></text>
            </staticText>
        </band>
    </title>
    <detail>
        <band height="443" splitType="Stretch">
            <image hAlign="Center" vAlign="Middle" isUsingCache="true" isLazy="true">
                <reportElement x="12" y="17" width="512" height="403"/>
                <imageExpression  class="net.sf.jasperreports.engine.JRRenderable">
                    <![CDATA[
                        net.sf.jasperreports.renderers.BatikRenderer.getInstance(
                            new java.io.File("C:\\Users\\akshayd\\Desktop\\polygons1.svg"))
                    ]]>
                </imageExpression>
            </image>
        </band>
    </detail>
</jasperReport>

我无法在其他格式(如HTML、XHTML等)中显示SVG文件。 - AkD
我还注意到,如果你从xml视图切换到设计视图,有时<imageExpression>标签中的class="net.sf.jasperreports.engine.JRRenderable"会被删除。这是因为设计视图会重新计算并有时会弄乱xml代码。但我会处理好这个问题。 - AkD
我也尝试在旧版本中预览,但没有成功 :( - AkD
我也向ireport bug跟踪器提出了同样的问题,以了解是否可能存在错误。 - AkD
请参见:https://dev59.com/6JDea4cB1Zd3GeqPgs1Q#39320863 - Dave Jarvis
1个回答

3

我想在我的报告中嵌入一个SVG文本,这个主题帮助了我成功。
我正在使用完全支持JasperReports 5.5.0的Jaspersoft Studio。
以下是我的做法:

  • 创建一个图像元素
  • 选择自定义表达式并让表达式为空
  • 修改JRXML源代码:在image标记中添加一个imageExpression标记
<image>
  <reportElement x="0" y="60" width="50" height="50" uuid="c0d0856e-0bb1-4634-b8b0-   6f7ace0e3ff3"/>
  <imageExpression><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromText("<svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.0\" width=\"88\" height=\"21\" id=\"svg\"><svg:g id=\"layer1\"><svg:path id=\"path1\" d=\"M 61.799149,2.0342178 L 67.119461,2.0342178 L 67.119461,19.213905 L 61.799149,19.213905 L 61.799149,2.0342178 z\" style=\"text-anchor:start;fill:#FF0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;\" /></svg:g> </svg:svg>")]]></imageExpression>
</image>

所以,我使用BatikRenderergetInstanceFromText方法。
不要忘记在SVG文本中保护双引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接