下午好。我有一个 JAR 文件,我已将一些图像作为资源附加到名为 logos 的文件夹中。由于安全限制,我被告知这样做(我们不希望图像文件与 JAR 暴露在同一文件夹中)。我首先尝试加载这些图像,就好像它们是 File 对象一样,但这显然不起作用。我现在尝试使用 InputStream 将图像加载到所需的 PDImageXObject 中,但图像未渲染到 PDF 中。这是我正在使用的代码片段:
String logoName = "aLogoName.png";
PDDocument document = new PDDocument();
// the variable "generator" is an object used for operations in generating the PDF
InputStream logoFileAsStream = generator.getClass().getResourceAsStream("/" + logoName);
PDStream logoStream = new PDStream(document, logoFileAsStream);
PDImageXObject logoImage = new PDImageXObject(logoStream, new PDResources());
PDPage page = new PDPage(new PDRectangle(PDRectangle.A4.getHeight(), PDRectangle.A4.getWidth()));
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(logoImage, 500, 100);
请注意,我已验证资源是否已正确加载,因为使用 logoFileAsStream.available() 会为各种徽标返回不同的值。运行此代码后,图像实际上并未绘制在 PDF 上,并且在打开它时,出现错误消息“此页面上存在错误。Acrobat 可能无法正确显示页面。请联系创建 PDF 文档的人员以获取更多信息”纠正问题。”出现。有人可以帮我弄清楚该代码片段有什么问题/将我的图像作为 JAR 资源加载的不同解决方案吗?非常感谢。如果需要更多细节/澄清,请告诉我。
此 PDImageXObject 构造函数仅供 PDFBox 内部使用。您可以使用
PDImageXObject.createFromByteArray(document, IOUtils.toByteArray(logoFileAsStream), logoName /* optional, can be null */)
以获得最大的灵活性,或者如果您知道它始终是 PNG 文件
LosslessFactory.createFromImage(document, ImageIO.read(logoFileAsStream))
不要忘记关闭 logoFileAsStream 和 contentStream。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)