403从html spring boot资源创建pdf时飞碟出错

1hdlvixo  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(365)

我想用spring boot从html生成pdf,所以我使用flying discer,并用itextrenderer生成pdf
但在我的html中,无法加载资源。当我打电话时:

FileOutputStream os = new FileOutputStream(file);
    iTextRenderer.createPDF(os);

我得到这个错误:
java.io.ioexception:服务器返回url的http响应代码:403:https://my-custom-url.com
它在本地主机上工作,但在部署到aws elastic beanstalk时不起作用。

xv8emn3q

xv8emn3q1#

我的服务器拒绝了请求,因为飞碟库中缺少一个用户代理。
为了解决这个问题,我重载了itextureagent,手动添加了一个用户代理:

public class ResourceLoaderUserAgent extends ITextUserAgent
{
    ResourceLoaderUserAgent(ITextOutputDevice outputDevice)
    {
        super(outputDevice);
    }

    @Override
    protected InputStream openStream(String uri) throws IOException
    {
        URLConnection connection = new URL(uri).openConnection();
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
        connection.connect();
        return connection.getInputStream();
    }
}

我是这样用的:

ITextRenderer iTextRenderer = new ITextRenderer();

    ResourceLoaderUserAgent callback = new ResourceLoaderUserAgent(iTextRenderer.getOutputDevice());
    callback.setSharedContext(iTextRenderer.getSharedContext());
    iTextRenderer.getSharedContext().setUserAgentCallback(callback);

相关问题