gpt4 book ai didi

xslt - 找不到 FOP 图像错误

转载 作者:行者123 更新时间:2023-12-01 00:46:20 27 4
gpt4 key购买 nike

我正在尝试使用带有 xslt 的外部图形来生成 PDF。大多数图像工作正常,但时不时会有一个图像“未找到”despite being viewable on a web browser .这是 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 中实现它的方法。

最佳答案

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

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);
}
}
}

关于xslt - 找不到 FOP 图像错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36869535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com