我在母版页中有一个带有图像的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>