2008-11-20 2 views
4

Я использую iText для создания счетов-фактур PDF для веб-приложения J2EE, а на странице - изображение, считываемое из URL-адреса, построенного из URL-адреса запроса. В средах разработки и тестирования это отлично работает, но в процессе производства я получаю java.io.IOException: не признанный образ.Как получить изображение с помощью iText при перенаправлении URL?

Если я вставляю URL-адрес в свой браузер, тогда возвращается правильное изображение, однако запрос перенаправляется с http на https. В моем коде, если я жестко кодирую URL-адрес переадресации, изображение отображается правильно.

Похоже, что при извлечении изображения с использованием com.lowagie.text.Image.getInstance (URL) перенаправления по URL-адресу не выполняются. Как я могу выводить изображение с перенаправленного URL с помощью iText?

ответ

6

Ну,

Если вы запрашиваете изображение из URL, он должен на самом деле указывает на изображение. Если URL-адрес указывает на веб-страницу, которая затем перенаправляется на другой URL-адрес (или код возврата из URL-адреса является перенаправлением), тогда он будет терпеть неудачу.

Это связано с тем, что метод getInstance() понимает, как использовать протокол определения местоположения HTTP для получения файла, но не понимая HTTP-протокол, достаточный для HTTP-клиента.

Вы можете просто использовать адрес «https», или вы можете сохранить изображение в своей программе и найти его, как предлагает CFreiner. Если ни один из этих вариантов невозможен, то единственным реальным решением является реализация кода для запроса URL-адреса, проверка его перенаправления и последующее перенаправление.

3

Есть ли причина, по которой вы должны получить это, используя URL? Вам нужно сопоставить изображение, на которое указывает url? Что делать, если он изменяется или удаляется?

Я не уверен в ваших требованиях, но может быть проще сохранить изображение с URL-адреса и разместить его где-нибудь в вашем проекте. После этого вы можете добавить его в PDF с:

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

Если у вас несколько переадресаций, вы не можете использовать URL. Вместо url вы можете указать путь изображения в Image.getInstance("path"). Вы можете поместить файл gif в свой пакет развертывания.

Смежные вопросы