【问题标题】:iText image in java servletjava servlet中的iText图像
【发布时间】:2010-03-05 09:18:51
【问题描述】:

我在 java servlet 中使用 iText (pdf/rtf) 生成字母,但在访问图像时遇到了问题。图像位于 WebContent/images 文件夹中。当我在本地服务器上运行它并指向图像目录的完整路径(c://eclipse/myproject/WebContent/images/letterHead.jpg)它的工作,但它无法在服务器上运行目录(“WebContent/图像/letterHead.jpg")。

该项目作为 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);

【问题讨论】:

    标签: jsp image servlets itext


    【解决方案1】:

    你不应该在java.io 东西中使用相对路径。您将依赖于当前工作目录,在 web 应用程序的情况下这是无法控制的。始终使用绝对磁盘文件系统路径。因此,c:/full/path/to/file.ext

    您可以使用ServletContext#getRealPath() 将相对网络路径转换为绝对磁盘文件系统路径。相对 Web 路径植根于公共 webcontent 文件夹,在您的情况下为 /WebContent。因此,您需要将上述代码的第一行替换为:

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

    【讨论】:

      【解决方案2】:

      以下代码可能对您有所帮助...

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

      【讨论】:

        【解决方案3】:

        以下代码可用于访问 java 类中的图像路径。

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

        【讨论】:

          【解决方案4】:

          所以我遇到了同样的问题,我想通过相对路径将图像添加到 pdf,所以当我制作可执行程序时,它可以在任何计算机上运行,​​即使它是否保存了图像。

          我找到了一种将图像添加为应用程序资源的方法。您需要将图像放在 src 目录或调用它的类的目录中,然后您可以使用以下代码:

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

          如果您将图像放在文件夹中,那么显然,您需要通过文件夹名称添加路径(“folderName/yourImageName”)。希望对您有所帮助!

          【讨论】:

            【解决方案5】:

            对于 Kotlin,如果图片在 resources 文件夹中,您还可以尝试以下操作:

            Image.getInstance(this::class.java.classLoader.getResourceAsStream("images/your_image.png").readBytes())

            【讨论】:

            • 操作的图像在资源中不在中。
            【解决方案6】:

            Resources

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

            【讨论】:

              猜你喜欢
              • 2012-10-12
              • 1970-01-01
              • 2013-04-05
              • 1970-01-01
              • 2011-12-16
              • 1970-01-01
              • 2021-02-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多