5

我正在尝试将图像添加到我的 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);

这工作得很好。我不明白为什么这在我的控制器中不起作用。

4

3 回答 3

9

我错过了这个:

ServletContext servletContext = request.getSession().getServletContext();

现在它可以从控制器工作。

ServletContext servletContext = request.getSession().getServletContext();
String relativeWebPath = "img/image.png";
String absoluteDiskPath = servletContext.getRealPath(relativeWebPath);
于 2013-03-26T14:06:18.057 回答
0

尝试从/WEB-INF/文件夹开始您的相对路径,因为/img/image.png可以在文件夹结构中的多个位置,那么您如何获得绝对路径。

请参阅有关getRealPath()的文档状态:

如果 servlet 容器无法将给定的虚拟路径转换为真实路径,则此方法返回 null。

这意味着您应该在使用它之前检查返回的值。

于 2013-03-25T14:36:43.793 回答
0

http://ananthkannan.blogspot.ru/2009/12/servletcontextgetrealpath-returns-null.html

当 webapp 部署为 WAR 时 weblogic 的另一个奇怪行为。ServletContext.getRealPath() 在部署为 WAR 时返回 null,但在部署为分解时它可以正常工作。当您仍想部署为 WAR 但想解决此问题时,我们可以通过两种方法解决此问题: 1. 转到服务器管理控制台-> 域-> Web 应用程序。单击已启用存档真实路径的复选框。这应该在域 config.xml 中创建一个条目,如下所示。真的

  1. 第二个选项是在 webapp 级别,通过如下更新 weblogic.xml: true Web 应用程序中设置的值优先于域级别设置的值。此属性的默认值为 false。
于 2015-05-15T13:17:39.550 回答