我正在尝试将图片添加到我的pdf文件中。图像位于“WebContent / img / image.png”中。首先,我将相对路径保存到字符串,然后将此相对路径转换为实际路径。
String relativeWebPath = "/img/image.png";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
Image image1 = Image.getInstance(absoluteDiskPath);
即便如此
String absoluteDiskPath = getServletContext().getRealPath("/");
不起作用。
当我定义相对路径时,我尝试了一些变体,但无法使它们中的任何一个起作用。当此行String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
尝试执行时,我总是得到nullPointerException。我在相对路径或其他方面做错了吗?我不知道这是否相关,但我使用 Spring 。
@RequestMapping(value = "/exportPhonebook.html", method = RequestMethod.POST)
public void exportPhonebook(Model model, HttpServletResponse response) {
try {
setResponseHeaderPDF(response);
Document document = new Document();
ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
PdfWriter pdfWriter = null;
pdfWriter = PdfWriter.getInstance(document, baosPDF);
PageNumbersEventHelper events = new PageNumbersEventHelper();
pdfWriter.setPageEvent(events);
document.open();
addMetaData(document);
addTitlePage(document);
String relativeWebPath = "/img/image.png";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
Image image1 = Image.getInstance(absoluteDiskPath);
document.add(image1);
addContent(document);
document.close();
pdfWriter.close();
OutputStream os = response.getOutputStream();
baosPDF.writeTo(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这是我在jsp中使用它的方式:
<input type="hidden" value="<%=getServletContext().getRealPath("/") %>" name="path">
我将它传递给控制器并添加相对路径。
path = path + "img\\image.png";
Image image = Image.getInstance(path);
这很好用。 我不明白为什么这在我的控制器中不起作用。
答案 0 :(得分:9)
我错过了这个:
ServletContext servletContext = request.getSession().getServletContext();
现在它可以在控制器上运行。
ServletContext servletContext = request.getSession().getServletContext();
String relativeWebPath = "img/image.png";
String absoluteDiskPath = servletContext.getRealPath(relativeWebPath);
答案 1 :(得分:0)
尝试从/WEB-INF/
文件夹开始相对路径,因为/img/image.png
可以位于文件夹结构中的多个位置,然后你怎么能获得绝对路径。
请参阅有关getRealPath()的文档说明:
如果servlet容器无法返回null,则此方法返回null 将给定的虚拟路径转换为真实路径。
这意味着您应该在使用之前检查返回的值。
答案 2 :(得分:0)
http://ananthkannan.blogspot.ru/2009/12/servletcontextgetrealpath-returns-null.html
将webapp部署为WAR时weblogic的另一个奇怪行为。 ServletContext.getRealPath()在部署为WAR时返回null,但在部署为爆炸时可以正常工作。当您仍希望部署为WAR但我们想要解决此问题时,有两种方法可以解决此问题: 1.转到服务器管理控制台 - &gt;域 - &gt; Web应用程序。单击已存档的实际路径的复选框。这应该进入域config.xml,如下所示。 真正