2010-03-05 3 views
4

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

Проект развернут в качестве 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); 

ответ

12

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

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

String relativeWebPath = "/images/letterHead.jpg"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
Image imghead = Image.getInstance(absoluteDiskPath); 
// ... 
+0

Он отлично работает! Большое спасибо. – Jon

0

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

URL imageUrl = getClass().getProtectionDomain().getCodeSource().getLocation(); 
Image img=Image.getInstance(imageurl+"../../../some/images/pic.gif");  
1

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

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

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

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

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

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

-1

Resources

Image foto = Image.getInstance(this.getClass().getResource("/static/img/gobierno.jpg"));