【问题标题】:Need help in displaying image in PDF using XSL-FO and data URI scheme在使用 XSL-FO 和数据 URI 方案在 PDF 中显示图像时需要帮助
【发布时间】:2012-05-14 21:47:27
【问题描述】:

对于DATA,如果我在参数中设置base64编码的字符串,

String imageData = Base64.encode(IOUtils.toByteArray(is));
transformer.setParameter("imageData", imageData);

并像这样在xslt中使用参数,

<fo:external-graphic src="data:image/jpeg;base64,$imageData"/>

我尝试了使用 url 和没有 url,但两者似乎都不起作用。请帮我。一个多月以来,我一直在努力将图像放在 pdf 上。

【问题讨论】:

  • 您的问题是您没有在属性内获取 base64 编码数据,还是您的 FO 引擎没有正确呈现数据 uri?

标签: java image xslt pdf xsl-fo


【解决方案1】:

您的问题是$imageData 没有与值一起输出,只是字符串文字“$imageData”?

当您在属性内部并想要评估变量的值时,您需要使用attribute value template。用花括号将变量包裹起来。

<fo:external-graphic src="data:image/jpeg;base64,{$imageData}"/>

【讨论】:

  • 非常感谢。有效。现在我有一些工作了,请你帮我一个更有效的解决方案来添加图像,而不是每次都读取并将图像转换为 bas64 字符串。这就是我的设置。我有在 xsl 的相对路径中的图像 - images/pic.jpg 我了解到要让 xsl 解析相对路径,我必须设置基本 URL。但默认的基本 URL 是域目录,即 'C:\Oracle\Middleware\user_projects/domains/myDomain/'。
  • 当应用程序部署时,它会在域目录中展开,我想要的图像在这个文件夹中 - 'servers/myApp/tmp/_WL_user/agency/29k2yv/war/images'。如果我将此目录设置为基本目录,我可以像这样访问图像 - 但是位置会在 QA 和生产环境中发生变化,并且不要不想硬编码应用程序之外的路径。有没有更好的解决方案?
  • 很高兴这有效。使获取 Base64 内容变得更容易的一种想法是创建一个 servlet,您可以将文件名或 URI 作为查询字符串参数传递,该参数将返回 XML 内容以及该资源的 Base64 值,您可以在其中进行 XPath 并检索内容.您可以通过多种方式引用这些 servlet URL(实体引用、使用 XSLT document() 函数等)。您的文件的物理位置可能会改变,但您可以维护一个静态 servlet 路径 http://localhost/myApp/base64Servlet?file=image.jpg
猜你喜欢
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多