BIRT的HTMLRenderReport为嵌入的图像添加了一个类似file://的url(而不是将它们嵌入到HTML中



我在母版页中有一个带有图像的BIRT报告。

我的BIRT设计文件:

我在报告中嵌入了一个png,它在body标记之后生成了以下XML:

  <list-property name="images">
      <structure>
          <property name="name">filename.png</property>
          <property name="type">image/png</property>
          <property name="data">
            BASE64 of the image
          </property>
      </structure>
   </list-property>

然后,我将它包含到母版页中,添加以下元素:

    <image id="828">
       <property name="source">embed</property>
       <property name="imageName">filename.png</property>
    </image>
我的BIRT设计文件的行为:

然后,如果我从BIRT设计器中运行预览,它可以很好地处理HTML和PDF输出。如果我使用IPDFRenderOption(从我的软件)渲染它,它会生成正确的pdf但是如果我使用HTMLRenderOption,那么图像不会嵌入到HTML报告中,但它会呈现如下内容:

 <img src="file:/.../apache-tomcat-7.0.35/design11.png">

期望:

而我期望的是:

 <img src="data:image/png;base64,BASE64 STUFF THAT I PUT IN THE LIST-PROPERTIES ">

那么,我怎么能让BIRT,当执行HTMLRenderOption,嵌入我的图像到HTML文件,而不是创建一个链接到它?

我通过在报表母版中添加两个不同的图像来解决这个问题:

设置PDF输出中的图像:

由于PDF渲染得很好,所以我保留了问题中所写的图像,并在HTML输出

中设置了该图像的可见性

在HTML输出中设置图像:

然后,在母版页中,我添加了一个新图像。这次我没有把它设置为嵌入式。相反,我将其设置为由URI引用。作为URI,我在HTML输出中设置了需要的base64 URI。基本上,我在报告的XML中添加了以下图像:

<image id="1972">
    <list-property name="visibility">
        <structure>
            <property name="format">pdf</property>
            <expression name="valueExpr" type="javascript">true</expression>
        </structure>
    </list-property>
        <property name="source">url</property>
        <expression name="uri" type="constant">data:image/png;base64, BASE 64 OF MY PNG IMAGE</expression>
 </image>

然后将图像设置为仅对HTML输出可见。

通过这种方式,BIRT呈现img标签,URL我放在XML中,无论它是什么。因此,它将data:image/png;base64, BASE 64 OF MY PNG IMAGE放置为url。因此,它将图像嵌入到HTML输出中。

在表中添加数据库中的图像:

BIRT支持blob字段内的图像,并可以管理将它们添加到报表中。要了解如何操作,请参见:http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.birt.doc%2Fbirt%2Flayout.5.7.html

如果它不工作,你可以管理插入一个动态值在你的url,仍然不编辑脚本(但当然使用一点Javascript来决定哪一列包含图像的数据)。

下面是从列中读取base64值的图像的XML代码:

  <image id="1974">
        <property name="source">url</property>
        <expression name="uri" type="javascript">"data:image/png;base64,"+row["BASE_64_PNG_COLUMN"]     </expression>
  </image>

最新更新