我使用PDFBOX创建了一个PDF。整个PDF生成完美,甚至在我使用时加载的图像
PDImageXObject ptabelle = PDImageXObject.createFromFile("src/main/resources/pdf/ptabelle.png", pdDocument);
但是项目需要在某个时候上线,所以我必须用类加载器替换静态路径。在完成PDF生成的所有操作后,将显示文本,但不显示图像。
有趣的是,在PDF内部"框"图像应该在哪里,但不是图像。
以下是流生成的代码。
ClassLoader classLoader = getClass().getClassLoader();
PDStream pdStream = new PDStream(pdDocument, classLoader.getResourceAsStream("pdf/ptabelle.png"));
PDResources pdResources = new PDResources();
PDImageXObject ptabelle = new PDImageXObject(pdStream, pdResources);
PDPageContentStream pdPageContentStream = new PDPageContentStream(pdDocument, page4);
这里是代码中的调用,长度+宽度变量在代码中定义。
pdPageContentStream.drawImage(ptabelle, TEXT_BEGIN, currentYCoord, 172, 107);
答案 0 :(得分:0)
请使用相应的new PDImageXObject(pdStream, pdResources)
方法,而不是PDFBox内部使用的LosslessFactory
。所以你的代码看起来像这样:
BufferedImage bim = ImageIO.read(classLoader.getResourceAsStream("pdf/ptabelle.png"));
PDImageXObject img = LosslessFactory.createFromImage(pdDocument, bim);
另请参阅PDImageXObject.createFromFileByExtension的javadoc,它解释了可以调用哪些工厂方法。