使用资源流在 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,其中解释了可以调用哪些工厂方法。
我使用 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,其中解释了可以调用哪些工厂方法。