使用 Apache POI,在使用 XMLSlideShow 创建 PowerPoint 演示文稿时,如何在段落内添加图像?

问题描述 投票:0回答:1

The Apache POI Cookbook 和各种其他示例讨论了直接在 PowerPoint 中添加图片,如下所示 -

XMLSlideShow ppt = new XMLSlideShow();
ppt.createSlide();
byte[] pictureData = IOUtils.toByteArray(new FileInputStream("logo-leaf.png"));

XSLFPictureData pd
= ppt.addPicture(pictureData, PictureData.PictureType.PNG);
XSLFPictureShape picture = slide.createPicture(pd);
picture.setAnchor(new Rectangle(320, 230, 100, 92));

这非常符合预期。

我需要的是一个段落,用于在根据数据重复的姓名和地址旁边显示用户个人资料图像 -

.

这与我们通常在上图所示的社交媒体页面中看到的内容类似,可以跨幻灯片扩展。

我尝试过但可以在

XSLFShape
找到相关方法。

也许有比使用段落更好的方式来呈现它。任何代码块,指针赞赏。

java apache-poi powerpoint
1个回答
0
投票

您可能想要创建将文本框和图像形状分组的组形状。

示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.sl.usermodel.*;
import org.apache.poi.xslf.usermodel.*;

import org.apache.commons.io.IOUtils; 

import java.awt.Rectangle;

public class CreatePPTXGroupShape {

 public static void main(String[] args) throws Exception {
     
  Object[][] data = new Object[][] {
   new Object[] {"Koala", IOUtils.toByteArray(new FileInputStream("./Koala.png"))},
   new Object[] {"Squirrel", IOUtils.toByteArray(new FileInputStream("./Squirrel.png"))},
   new Object[] {"Fox", IOUtils.toByteArray(new FileInputStream("./Fox.png"))}
  };

  SlideShow slideShow = new XMLSlideShow();

  Slide slide = slideShow.createSlide();
  
  int groupLeft = 100;
  int groupTop = 50;
  int groupWidth = 250;
  int groupHeight = 100;
  int groupPadding= 10;
  
  for (Object[] row : data) {
   GroupShape shapeGroup = slide.createGroup();
   shapeGroup.setInteriorAnchor(new Rectangle(groupLeft, groupTop, groupWidth, groupHeight));
   shapeGroup.setAnchor(new Rectangle(groupLeft+groupPadding, groupTop+groupPadding, groupWidth-groupPadding, groupHeight-groupPadding));
 
   int x = groupLeft;
   int y = groupTop;
   int width = 100;
   int height = 100;

   TextShape textShape = shapeGroup.createTextBox();
   Rectangle rect = new Rectangle(x, y, width, height);
   textShape.setAnchor(rect);
   String text = (String)row[0];
   textShape.setText(text);

   x = groupLeft + 150;
   y = groupTop;
   width = 100;
   height = 100;

   byte[] pictureDataByte = (byte[])row[1];
   PictureData pictureData = slideShow.addPicture(pictureDataByte, PictureData.PictureType.PNG);
   PictureShape pictureShape = shapeGroup.createPicture(pictureData);
   rect = new Rectangle(x, y, width, height);
   pictureShape.setAnchor(rect);

   groupTop += 110;
  
  }

  FileOutputStream out = new FileOutputStream("./CreatePPTXGroupShape.pptx");
  slideShow.write(out);
  out.close();
 }
}

结果:

© www.soinside.com 2019 - 2024. All rights reserved.