2010-03-05 67 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"));