当前位置: 首页 > 知识库问答 >
问题:

FOP图像未找到错误

阎扬
2023-03-14

我正在尝试使用带有xslt的外部图形来生成PDF。大多数图像都工作正常,但偶尔会有一张“找不到”,尽管可以在Web浏览器上查看。FOP吐出的错误如下:

11:29:15.653 [main] ERROR org.apache.fop.apps.FOUserAgent - Image not found. URI: http://memesvault.com/wp-content/uploads/Derp-Meme-031.jpg. (No context info available)

这是我的外部图形部分:

<xsl:variable name="mediaUrl">
    <xsl:value-of select="mediaUrl" />
</xsl:variable>
<fo:external-graphic src="url('{$mediaUrl}')"
                     height="200"
                     max-width="200"
                     content-width="scale-to-fit" />

知道我做错了什么吗?

编辑:看起来这个问题与服务器不允许访问自动请求有关。有没有办法在fop 2.1中设置用户代理的URIResolver?这一功能似乎存在于以前的版本中,但我似乎找不到一种在2.1中实现的方法。

共有1个答案

袁运良
2023-03-14

因此,发生这种情况的原因是,正如 lfurini 所建议的那样,服务器由于用户代理而阻止了请求。可以通过将自定义 URIResolver 与 FOP 结合使用来解决此问题:

URIResolverAdapter uriResolverAdapter = new URIResolverAdapter(new UserAgentUriResolver());
FopFactoryBuilder builder = new FopFactoryBuilder(URI.create("/"), uriResolverAdapter);
fopFactory = builder.build();

这里有一个非常简单的URIResolver,它添加了用户代理。

import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.stream.StreamSource;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;

public class UserAgentUriResolver implements URIResolver {

    private static final String USER_AGENT = "whatever";

    @Override
    public Source resolve(String href, String base) throws TransformerException {
        try {
            URL url = new URL(href);
            URLConnection connection = url.openConnection();
            connection.setRequestProperty("User-Agent", USER_AGENT);
            return new StreamSource(connection.getInputStream());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
 类似资料:
  • 我已经将FOP版本从fop 1.1升级到fop 2.3,但是 org.apache.fop.events。未找到LoggingEventListener processEvent Image。 以下是为升级而修改的代码片段。使用fop 2.3主控查看代码 法典: 查看fop 2.3的代码 XSLT 代码

  • 我正在尝试从xml数据创建pdf。我在Windows中使用Apache FOP 1.1 for Java。应用程序在Eclipse中运行得很好,但是当我试图从导出的。jar图像不放在PDF中。我尝试在cdm上运行它,以便查看运行时的日志。例外情况如下: 我必须解释,即使这是一个例外,程序也会一直运行到最后,并呈现PDF,但没有图像。 我已经尝试了一些不同的方法来解决这个问题,但没有成功。我在goo

  • 我的 Apache FOP 应用程序有问题。 一切正常,直到我开始将外部文件(xsl、ttf、…)从外部工作目录打包到应用程序的jar文件中。从那以后,不再加载图像,我收到以下错误: 在 xsl 文件中,图像嵌入了: 当我将文件打包到jar中时,为什么图像不再工作?图像作为base64字符串嵌入到xsl文件中,因此图像数据必须可用... 谢谢:) 编辑1我正在用以下内容设置FopFactory基本

  • 查看此代码笔,了解简单的vuetify设置。 https://codepen.io/khoulaiz/pen/gObJPxO?editors=1010 中间图像将无法加载。我有一个错误处理程序,其中我想用一个工作映像替换失败映像的src属性,并在其中强制重新加载映像。 我能够替换失败映像的src,但我在强制重新加载v-img的所有尝试中都失败了。 到底为什么我没有得到一个失败加载的v-img的参考

  • 我在下面的帖子中提到了这个问题和我的答案:来自Apache FOP 1.1和Java的PDF图像。我试图在每页上显示背景图像(有点像水印): 我让它在我的机器上从Eclipse和导出的jar中工作,如上面提到的帖子所述,但它不适用于我以外的机器。它总是说不支持该格式。 我正在使用 FOP 网站上的 FOP 1.1 罐子,并将它们全部添加到我的锁片中。也将它们与罐子一起导出。我没有解决方案的想法了。

  • 我正在尝试使用spark sql运行一个基本的java程序 如果有人能给我指出一些在斯巴克-sql(斯巴克-2.1.1)上可以阅读的好材料,那也太好了。我计划使用火花来实现ETL,连接到MySQL和其他数据源。 异常在线程"main"org.apache.spark.sql.分析异常:未找到表或视图:;第1行pos 21;