【发布时间】:2021-07-01 07:10:49
【问题描述】:
我有一个 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);
【问题讨论】:
-
我从未尝试过以这种方式加载资源,我会使用
PDFImageService.class.getResourceAsStream("/image/myImage.jpg"),然后将其放入字节数组中,然后使用PDImageXObject.createFromByteArray()。 -
@TilmanHausherr:我尝试使用 PDImageXObject.createFromByteArray(document, byteArray, "myImage");我收到图像类型 myImage 不支持错误。我也尝试通过将第三个参数传递为 null 但仍然得到相同的错误。
-
那么它要么是空的(你是否正确复制了流,检查错误结果?)或者它不是一个有效的图像,或者你有资源过滤。
-
@TilmanHausherr:它与 IOUtils.toByteArray 一起使用。 InputStream imageAsStream = this.getClass().getResourceAsStream(/image/myImage.jpg); PDImageXObject.createFromByteArray(document, IOUtils.toByteArray(imageAsStream), null)。谢谢你的帮助!!
标签: java spring spring-boot classpath pdfbox