2008-11-20 49 views
4

我正在使用iText来为J2EE Web应用程序生成PDF发票,并且该页面上包含从根据请求URL构建的URL读取的图像。在开发和测试环境中,这工作正常,但在生产中,我得到一个java.io.IOException:不是一个可识别的图像格式。如何在URL重定向时使用iText检索图像?

如果我将url粘贴到我的浏览器中,则会返回正确的图像,但请求会从http重定向到https。在我的代码中,如果我对重定向URL进行了硬编码,那么图像显示正确。

因此,当使用com.lowagie.text.Image.getInstance(URL)检索图像时,URL上的重定向未被遵循。如何使用iText从重定向的URL输出图像?

回答

6

好,

如果从URL请求的图像,它必须真正指向图像:然后你就可以把它添加到您的PDF。如果URL指向一个网页然后重定向到另一个URL(或者来自URL的返回码是重定向),那么它将会失败。

这实质上是由于getInstance()方法了解如何使用HTTP位置协议来获取文件,但不了解HTTP协议足以作为HTTP客户端。

您可以使用'https'地址,或者您可以将图像存储在您的程序中并找到CFreiner建议的地址。如果这两个选项都不可行,那么您唯一真正的解决方案就是实现代码来查询URL,检查它是否是重定向以及是否遵循重定向。

3

是否有一个原因,你必须得到这个使用的URL?你需要匹配url指向的图片吗?如果它改变或被删除会怎么样?

我不确定你的要求,但它可能更容易从URL保存图像,并将其放置在您的项目中的某个地方。

Image.getInstance("yourimage.gif"); 
2

当你有多个重定向时,你不能使用网址。您可以在Image.getInstance("path")中指定图像的路径,而不是url。您可以将gif文件放入您的部署包中。