Apache PDFbox Java 收到错误无法读取输入文件



我正在尝试使用PDFBox版本2.0.1向我的PDF文件添加徽标。我有以下代码:

public class PDFService {
    public void createPdf() {
        // Create a document and add a page to it
        PDDocument document = new PDDocument();
        PDPage page = new PDPage();
        document.addPage(page);
        // Create a new font object selecting one of the PDF base fonts
        PDFont font = PDType1Font.HELVETICA_BOLD;
        ServletContext servletContext = (ServletContext) FacesContext
                .getCurrentInstance().getExternalContext().getContext();
        try {
            PDImageXObject pdImage = PDImageXObject.createFromFile(
                    servletContext.getRealPath("/resources/images/logo.png"),
                    document);
            PDPageContentStream contentStream = new PDPageContentStream(
                    document, page);
            contentStream.drawImage(pdImage, 20, 20);
            contentStream.beginText();
            contentStream.setFont(font, 12);
            contentStream.endText();
            // Make sure that the content stream is closed:
            contentStream.close();
            // Save the results and ensure that the document is properly closed:
            document.save("Hello World.pdf");
            document.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

我收到错误javax.imageio.IIOException:无法读取输入文件!

PDImageXObject pdImage = PDImageXObject.createFromFile(
                    servletContext.getRealPath("/resources/images/logo.png"),
                    document);

servletContext.getRealPath 返回的路径C:UserserickpezoaDesktopMultivisionMaterialsappseclipse KeplereclipseProjects.metadata.pluginsorg.eclipse.core.resourcesServicios_Exequialesbuildweboutputresourcesimageslogo.png

我在这里做错了什么?

如果您使用的是 Maven,并且您的图像文件夹位于 Eclipse 中的 src/main/resources 下,您可以尝试:

PDImageXObject pdImage = PDImageXObject.createFromFile(
                PDFService.class.getResource("/images/logo.png").getPath(),
                document);

只有在src/main/resources下您有另一个名为 resources 的文件夹时,才需要/resources/images/logo.png路径。或者不使用Maven,并且您的输出文件夹包含:/resources/images。在这种情况下:

PDImageXObject pdImage = PDImageXObject.createFromFile(
                PDFService.class.getResource("/resources/images/logo.png").getPath(),
                document);

希望对您有所帮助。

最新更新