2010-03-05 58 views
4

我正在使用java servlet中的iText(pdf/rtf)生成字母,並且在訪問圖像時遇到了問題。這些圖像位於WebContent/images文件夾中。當我在本地服務器上運行它並指向圖像目錄(c://eclipse/myproject/WebContent/images/letterHead.jpg)的完整路徑時,它的工作正常,但無法在具有目錄的服務器上運行(「WebContent /圖像/ letterHead.jpg「)。java servlet中的iText圖像

該項目正在部署一個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東西使用相對路徑。您將依賴於當前的工作目錄,這在Web應用程序中是無法控制的。始終使用絕對磁盤文件系統路徑。因此,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 2010-03-05 11:57:32

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"));