2

我在母版页中有一个带有图像的 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 文件中,而不是创建指向它的链接?

4

1 回答 1

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呈现带有i 放入的img标签,无论它是什么。因此,它把as 。因此它将图像嵌入到输出中。URLXMLdata:image/png;base64, BASE 64 OF MY PNG IMAGEurlHTML

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

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>
于 2014-06-20T08:34:33.600 回答