【问题标题】:fop in glassfish fail to render external resourcesglassfish 中的 fop 无法渲染外部资源
【发布时间】:2011-06-07 11:24:02
【问题描述】:

我正在通过 fop 1.0 从 java 库中生成 PDF 文件。单元测试运行良好,PDF 按预期呈现,包括外部图形:

<fo:external-graphic content-width="20mm" src="url('images/image.png')" />

如果我在 glassfish 3.1 的 Java EE 应用程序中呈现它,我总是会收到以下错误:

Image not found. URI: images/image.png. (No context info available)

我仔细检查了图像是否可用。它在 .ear 文件中的 .jar 文件中可用,因此 ClasspathUriResolver 应该可以使用它。这是我如何设置 fop-factory 的代码片段:

FopFactory fopFactory = FopFactory.newInstance();
URIResolver uriResolver = new ClasspathUriResolver();
fopFactory.setURIResolver(uriResolver);
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
...

我还将 URI 解析器分配给了 TransformerFactory 和 Transformer,但没有成功。如果有人可以帮助我,那就太好了。

-- 温默

顺便说一句:ClasspathUriResolver() 看起来像这样

public class ClasspathUriResolver implements URIResolver {

  @Override
  public Source resolve(String href, String base) throws TransformerException {
    Source source = null;
    InputStream inputStream = ClassLoader.getSystemResourceAsStream(href);
    if (inputStream != null) {
      source = new StreamSource(inputStream);
    }
    return source;
  }
}

【问题讨论】:

    标签: glassfish apache-fop


    【解决方案1】:

    你考虑一个不同的类加载器然后ClassLoader.getSystemResourceAsStream(href);

    试试InputStream inputStream = getClass().getResourceAsStream(href); 或别的什么,也许。

    那么它有效吗?

    【讨论】:

    • 嗨,towi,它正在工作!感谢您的回答。似乎在 AppServer 中使用静态 ClassLoader 不是一个好主意 - 一如既往。
    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 2016-11-07
    • 2014-10-22
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多