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

时间:2014-06-19 14:24:27

标签: birt birt-emitter

我有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 ">

那么,在使用HTMLRenderOption执行BIRT时,如何将我的图像嵌入HTML文件而不是创建指向它的链接?

1 个答案:

答案 0 :(得分:1)

我通过向报告的母版页添加两个不同的图像来解决这个问题:

在PDF输出中设置图像:

由于PDF渲染得很好,我在问题中写了这个图像,并在HTML输出中引出了这个图像的可见性

在HTML输出中设置图像:

然后,在母版页中,我添加了一个新图像。这次我没有把它设置为嵌入式。相反,我将其设置为URI引用。作为URI我在base64 URI输出中设置了我需要的HTML。基本上,我在报告的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 fiels中的图片,并可以管理将它们添加到您的报告中。要了解具体方法,请参阅:http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.birt.doc%2Fbirt%2Flayout.5.7.html

如果它不起作用,您可以管理在您的网址上插入动态值,仍然无需编辑脚本(但当然使用一些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>