找不到FOP图片错误

扫描

我正在尝试使用带有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来实现此功能的方法。

扫描

因此,发生这种情况的原因是,如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);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章