使用资源流在 PDF 生成中不显示(但加载)图像

Image not displaying (but loading) in PDF generation using resource stream

我使用 PDFBOX 创建了一个 PDF。整个 PDF 生成完美,甚至在我使用时加载图像

PDImageXObject ptabelle = PDImageXObject.createFromFile("src/main/resources/pdf/ptabelle.png", pdDocument);

但是该项目有时需要上线,所以我必须用 class 加载程序替换静态路径。完成 PDF 生成的所有操作后,会显示文本,但不会显示图像。

有趣的是,在 PDF 中,"box" 图像应该在那里,但不是图像。

这是流生成的代码。

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

请使用适当的 LosslessFactory 方法,而不是供 PDFBox 内部使用的 new PDImageXObject(pdStream, pdResources)。所以你的代码看起来像这样:

BufferedImage bim = ImageIO.read(classLoader.getResourceAsStream("pdf/ptabelle.png"));
PDImageXObject img = LosslessFactory.createFromImage(pdDocument, bim);

另请参阅 PDImageXObject.createFromFileByExtension 的 javadoc,其中解释了可以调用哪些工厂方法。