Birt 4.4.1:导出为 pdf 不显示图像

Birt 4.4.1 : Export to pdf does not display an image

我的 birt 版本包含一张图片,当我导出到 HTML 时,通过 against export in pdf 显示图片不起作用,并出现以下消息 "The resource of this deferred item is not reachable . "

我咨询了你的论坛,但我没有找到明确的解决方案,在简化的 rptdesign 问题文件下面,

知道是我根据我三年的 birt 经验向我的团队建议使用 Birt :3 ,恐怕下面的示例无法在 pdf 中正确显示,这意味着我必须查看对于允许我在生成的 pdf 中显示 TextEditor 内容的其他工具(或库)。 :(

仅供参考:

文件:export_to_pdf.rptdesign

提前致谢。

为了也显示 PDF 的 base64 图像,您可以在图像元素的 onCreate 中使用带有脚本的动态图像元素来解码 base64。

importPackage(Packages.javax.imageio);
importPackage(Packages.java.io);
importPackage(Packages.sun.misc);
decoder = new BASE64Decoder();
decodedBytes = decoder.decodeBuffer(this.getRowData().getColumnValue("CLOBData"));
this.data =decodedBytes;
bais = new ByteArrayInputStream( decodedBytes);
bufimg = ImageIO.read(bais);
this.setHeight(bufimg.getHeight() +"px");
this.setWidth(bufimg.getWidth() +"px");

来自:http://developer.actuate.com/community/forum/index.php?/topic/35862-dynamic-textclob-dataset-html-content-not-showing-the-html-embeded-image-base64/

备选

<value-of format="HTML"> if(row["B_CONTENT"] == null) {"";}else{ "<img src='data:image/png;base64,"}</value-of><value-of format="HTML"> row["B_CONTENT"]</value-of><value-of format="HTML"> if(row["B_CONTENT"] == null ) {"";}else{"' height='120' width='100' />"} </value-of>

来自:http://developer.actuate.com/community/forum/index.php?/topic/29367-print-image-base64-in-birt-report/

根据“JFreeman”的回复,我想我想要的目前是不可能的,因为我想显示的图像被封装在HTML标签中,

The reason the image does not display in PDF is due to being in an HTML text element using HTML to convert the base64 into the image. This HTML code will be executed client side within the browser and does not occur when the report is exported to PDF which is generated server side.

但我设法通过使用以下方法解决了这个问题:

  • 我创建了一个 java 进程来提取封装的 code64 图像 在 HTML 标签内,我 运行 图像的物理创建,并且我 将其存储在我服务器中先前创建的文件夹中。
  • 这种处理 java 为我提供了完整的 URL 创建的图片 此 url 将存储在名为“illustration”的新 table 中
  • 我把图片中的code64替换成文字(见附录部分的插图NamedOrnumber541),新创建的频道将存储在一个新的列中,内容新专栏的 将出现在版本 birt 中。
  • 在生成的报告末尾,我显示了与组件“图像”启动的版本相关的所有图像,参数化“共享资源中的图像文件”,并存储要显示的图像的 URL如前所述,在插图中 table。
  • 最后,在我的数据库中,我有两列,第一列包含封装在 HTML 标签(内容 TextEditor)中的 base64 编码图像,第二列将包含与第一列相同的内容除了我没有使用 code64 图像之外,我只是指出要查看的图像位于报告的最后部分(附件),该部分显示了我的 java 处理已经生成的图像。

确实这个算法有点复杂(一旦有时间我会做一个小项目,包含所有的处理/控制)但关键是如何让客户相信这个解决方案是可取的以便用户输入的文本清晰可见,而不会被图片打扰:-)。