【问题标题】:Birt 4.4.1 : Export to pdf does not display an imageBirt 4.4.1:导出为pdf不显示图像
【发布时间】:2015-01-28 10:19:13
【问题描述】:

我的 birt 版本包含一张图片,当我导出为 HTML 时,图像显示为反对在 pdf 中导出不起作用,并出现以下消息“无法访问此延期项目的资源。”

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

知道是我根据我三年的 birt 经验建议我的团队与 Birt 合作的 :3 ,我担心下面的示例在 pdf 中无法正常显示,这意味着我必须寻找其他的允许我在生成的 pdf 中显示 TextEditor 的内容的工具(或库)。 :(

仅供参考:

  • 要显示的内容是从数据库中检索出来的(该数据库存储了 TextEditor 的内容)。
  • 使用的 Birt 版本是 4.4.1

文件:export_to_pdf.rptdesign

提前谢谢你。

【问题讨论】:

  • 我们可以使用 "image" birt 元素在报表中显示动态图像,并且该图像可以正确导出为 PDF。但是,在您的示例中,图像是一个字符串 base64 编码,嵌入在 HTML 文本中。如果我正确理解了用例,您的整个报告将主要是一个 HTML 文本元素? AFAIK,PDF 发射器本身无法处理这种图像。不过,它可能会被扩展以支持这一点。
  • @Dominique :上面的例子只是我遇到的问题的简化,但我的最终版本包含几个表格和图表。因此,据我了解,BIRT 无法管理包含格式化图像 base64 编码的 html 内容:(,对我来说最大的问题是富文本编辑器(例如:ckeditor)通常以 html 格式生成文本,这就是我保存在数据库中,我没有其他技巧可以解决这个问题!

标签: ckeditor pdf-generation birt rich-text-editor


【解决方案1】:

为了也显示 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/

【讨论】:

  • 只有当我拥有的内容只是编码图像 code64 时,您的解决方案才有效,但我的示例是封装在 HTML 标记中的 code64 图像:(
  • 我找到了一种解决方法(非技术性),但我无权发表回复,我的帐户目前已被禁止,我会将其作为评论发布,但您会丢失文本的格式和它会被误读,希望我在这个论坛上的贡献能帮助我摆脱黑名单网站:)
【解决方案2】:

基于“JFreeman”的响应,我认为我想要的目前是不可能的,因为我要显示的图像被封装在 HTML 标记中,

图像不显示在 PDF 中的原因是由于位于使用 HTML 将 base64 转换为图像的 HTML 文本元素中。此 HTML 代码将在浏览器客户端执行,当报表导出为服务器端生成的 PDF 时不会发生。

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

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

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

【讨论】:

  • 嗨,Nimpo,您创建了一个小项目来代表您的解决方案吗?
猜你喜欢
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
相关资源
最近更新 更多