【问题标题】:FOP image not found when using fop 2.3 version使用 fop 2.3 版本时找不到 FOP 图像
【发布时间】:2018-07-16 07:28:58
【问题描述】:

我已经将 FOP 版本从 fop 1.1 升级到 fop 2.3 版本,但是得到了

org.apache.fop.events.LoggingEventListener processEvent Image not found.

下面是为升级修改的代码sn-ps。 使用 fop 2.3 主视图代码

代码:

  TransformerFactory factory = TransformerFactory.newInstance();
  Transformer transformer = factory.newTransformer();

  FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

  //foUserAgent.setURIResolver( this.getURIResolver() );
  transformer.setURIResolver(this.getURIResolver());

  Fop fop = null;
  Source src = new StreamSource(new ByteArrayInputStream(foDoc));

  if (this.getContentType().equals("application/pdf"))
  {
    fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, os);
  }
  else if (this.getContentType().equals("application/postscript"))
  {
    fop = fopFactory.newFop(MimeConstants.MIME_POSTSCRIPT, foUserAgent, os);
  }

查看 fop 2.3 的代码

protected static final FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI(), resolver);

XSLT 代码

<fo:external-graphic src = "stylesheets/Anthem_Join_In.bmp"/>

【问题讨论】:

    标签: java xsl-fo apache-fop


    【解决方案1】:

    解析器的 API 已更改,并且文档记录不充分。此代码适用于 JSF webApp 中的我(fop 2.3)。

    final ServletContext sc = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
    
    // Create ServletContext resource Resolver
    ResourceResolver resolver = new ResourceResolver() {
        @Override
        public Resource getResource(URI uri) throws IOException {
            return new Resource(sc.getResourceAsStream(uri.toASCIIString()));
        }
    
        @Override
        public OutputStream getOutputStream(URI uri) throws IOException {
            URL url = sc.getResource(uri.toASCIIString());
            return url.openConnection().getOutputStream();
        }
    };
    
    // Buid the factory
    FopFactoryBuilder builder = new FopFactoryBuilder(new URI(sc.getContextPath()), resolver);
    FopFactory FOP_FACTORY = builder.build();
    

    我项目中之前代码的其余部分保持不变。我没有使用transformer.setURIResolver(...)

    xml fop 代码如下所示:

    <fo:external-graphic width="auto" content-width="164pt" height="auto" src="url(/resources/img/main-logo.png)"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      相关资源
      最近更新 更多