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

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

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

有帮助吗?

解决方案

那么,

如果您要求提供来自网址的图片,则必须指向该图片。如果URL指向一个网页,然后重定向到另一个URL(或者URL中的返回代码是重定向),那么它将失败。

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

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

其他提示

有没有理由你必须使用URL?你必须匹配网址指向的图像吗?如果它改变或被删除怎么办?

我不确定您的要求,但可能更容易从网址保存图像并将其放在项目中的某个位置。然后您可以使用以下命令将其添加到pdf中:

Image.getInstance("yourimage.gif");

如果您有多个重定向,则无法使用网址。您可以在Image.getInstance("path")中指定图像的路径,而不是网址。您可以将gif文件放在部署包中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top