Изображение iText в сервлете Java - PullRequest
4 голосов
/ 05 марта 2010

Я делаю генерацию писем с помощью iText (pdf / rtf) в сервлете Java, и у меня возникла проблема с доступом к изображениям. Изображения находятся в папке WebContent / images. Когда я запускаю его на локальном сервере и указываю полный путь к каталогу изображений (c: //eclipse/myproject/WebContent/images/letterHead.jpg), он работает, но не работает на сервере с каталогом ("WebContent / изображения / letterHead.jpg ").

Проект развертывается как WAR-файл на сервере Tomcat, и в результате получается адрес, аналогичный

http://someserver:8081/projectName/someJSP.jsp

Я не понимаю, как ссылаться на изображения относительно в этой среде, и любая помощь будет высоко ценится.

Вот мой код

Image imghead = Image.getInstance("WebContent/images/letterHead.jpg");
imghead.setAbsolutePosition(35,770);
imghead.scaleAbsolute(125, 42);
document.add(imghead);

Ответы [ 6 ]

13 голосов
/ 05 марта 2010

Вы никогда не должны использовать относительные пути в java.io материалах. Вы будете зависеть от текущего рабочего каталога, который никоим образом не контролируется в случае веб-приложения. Всегда используйте абсолютные пути к файловой системе диска. Таким образом, c:/full/path/to/file.ext.

Вы можете использовать ServletContext#getRealPath() для преобразования относительного веб-пути в абсолютный путь к файловой системе диска. Относительный веб-путь коренится в общедоступной папке веб-контента, которая в вашем случае, таким образом, /WebContent. Итак, вам нужно заменить первую строку кода выше на:

String relativeWebPath = "/images/letterHead.jpg";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
Image imghead = Image.getInstance(absoluteDiskPath);
// ...
1 голос
/ 06 марта 2015

Следующий фрагмент кода может помочь вам ...

String path = request.getContextPath();
String split_path[] = path.split("/");
path = request.getRealPath(split_path[0]);
String imagePath="\\resources\\images\\letterHead.jpg";
Image image = Image.getInstance(path+imagePath);
0 голосов
/ 06 января 2019

Для Kotlin, если изображение находится в папке resources, вы также можете попробовать следующее:

Image.getInstance(this::class.java.classLoader.getResourceAsStream("images/your_image.png").readBytes())

0 голосов
/ 18 апреля 2017

Ресурсы

Image foto = Image.getInstance(this.getClass().getResource("/static/img/gobierno.jpg"));
0 голосов
/ 02 мая 2015

Итак, у меня возникла та же проблема, я хотел добавить изображение в pdf, но через относительный путь, поэтому, когда я создавал исполняемую программу, она работала на любом компьютере, даже если изображение сохранено или нет. 1001 *

Я нашел способ добавить изображение в качестве ресурса вашего приложения. Вам нужно поместить изображение в каталог src или каталог класса, в котором вы его вызываете, и затем вы можете использовать следующий код:

Image image = Image.getInstance(yourClassName.class.getResource("/yourImageName")));

Если вы поместите изображение в папку, то, очевидно, вам нужно будет добавить путь через имя папки ("имя_папки / ваше имя_имя"). Надеюсь, это поможет!

0 голосов
/ 08 августа 2014

Следующий код может быть использован для доступа к пути изображения в классе Java.

URL imageUrl = getClass().getProtectionDomain().getCodeSource().getLocation();
Image img=Image.getInstance(imageurl+"../../../some/images/pic.gif");    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...