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
找到相关方法。
也许有比使用段落更好的方式来呈现它。任何代码块,指针赞赏。
您可能想要创建将文本框和图像形状分组的组形状。
示例:
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();
}
}
结果: