4

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

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

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

4

3 回答 3

6

好,

如果您从 URL 请求图像,它必须实际指向该图像。如果 URL 指向的网页然后重定向到另一个 URL(或 URL 的返回码是重定向),那么它将失败。

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

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

于 2008-11-28T00:02:36.990 回答
3

您是否有理由必须使用 URL 来获取它?您是否必须匹配 url 指向的图像?如果它改变或被删除怎么办?

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

Image.getInstance("yourimage.gif");
于 2008-11-21T03:36:54.517 回答
2

当您有多个重定向时,您不能使用 url。代替 url,您可以在Image.getInstance("path"). 您可以将 gif 文件放在部署包中。

于 2010-08-24T04:38:42.497 回答