PDFBox:从JAR资源将图像加载到PDF中



下午好。我有一个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。

最新更新