无法使用 PDFBox 将类路径中的图像插入到 PDF 中

Unable to Insert image from classpath into PDF using PDFBox

我有一个 springBoot 项目,我正在尝试使用 PDFBox 库将图像插入 PDF。该图像存在于 src/main/resources/image 文件夹 (myImage.jpg) 中。实现代码如下。虽然 运行 程序出现错误,指出在指定路径找不到图像。在这种情况下从类路径检索图像的正确方法是什么。

public class PDFImageService {  
  
public void insertImage() throws IOException {  
              
    //Loading an existing document   
      File file = new File("/eclipse-workspace/blank.pdf");  
      PDDocument doc = PDDocument.load(file);  
  
//Retrieving the page  
      PDPage page = doc.getPage(1);  
  
//Creating PDImageXObject object  
      PDImageXObject pdImage = PDImageXObject.createFromFile("/image/myImage.jpg",doc);  
  
//creating the PDPageContentStream object  
      PDPageContentStream contents = new PDPageContentStream(doc, page);  

//Drawing the image in the PDF document  
contents.drawImage(pdImage, 250, 300);  

      System.out.println("Image inserted Successfully.");  
  
//Closing the PDPageContentStream object  
contents.close();         
  
//Saving the document  
doc.save("/eclipse-workspace/blank.pdf");  
  
//Closing the document  
doc.close();  
}  

}

如果我将完全指定的图像路径指定为

,它就可以正常工作
PDImageXObject pdImage = PDImageXObject.createFromFile("C:\Users\Dell\Desktop\PDF\myImage.jpg",doc);  

除非 eclipse-workspace 文件夹位于 OS 中的/(根)顶级文件,否则它将是隐含的和不正确的陈述,当您安装配置的 eclipse 时,它​​通常断言用户主文件夹放置工作区进入。如果它在 root / 那么我建议你在 IOException 之前添加一个 FileNotFoundException。

正如评论中所讨论的那样,它的工作原理是使用

PDImageXObject img;
try (InputStream is = PDFImageService.class.getResourceAsStream("/image/myImage.jpg");
{
    // check whether InputStream is null omitted
    byte [] ba = IOUtils.toByteArray(imageAsStream);
    img = PDImageXObject.createFromByteArray(document, ba, "myImage.jpg");
}