XSLFGroupShape 不包含其子形状
XSLFGroupShape does not encompass its child shapes
我使用的是 Apache POI 3.16(撰写本文时的最新版本)。在下面的代码片段中,我创建了一个 XSLFGroupShape,然后我用它来创建一堆子形状:
XSLFGroupShape group = slide.createGroup();
XSLFAutoShape cardRect = group.createAutoShape();
cardRect.setShapeType(ShapeType.RECT);
cardRect.setAnchor(rect);
XSLFPictureShape avatarShape = group.createPicture(avatar);
// More shapes added to the group here...
问题如下:在生成的 PowerPoint 文件中,组位置和尺寸似乎未初始化(我选择了内容像素化的矩形;整个矩形及其内容是单个 XSLFGroupShape;注意幻灯片左上角的组操纵器):
我的代码中是否遗漏了任何内容?有没有办法规避或解决这个问题?
GroupShape
需要一个 Anchor
和一个 InteriorAnchor
。并且分组的形状必须适合 GroupShape
。当用户使用组时,PowerPoint
GUI 会自动进行管理。但是 apache poi
需要为此进行正确的设置,因为它只是将程序所说的内容写入文件。
示例:一组形状,宽度为 350,高度为 300,左侧为 100,顶部为 50,每个角都有一个简单的形状。
import java.io.FileOutputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.*;
import java.awt.Rectangle;
import java.awt.Color;
public class CreatePPTXGroupShape {
public static void main(String[] args) throws Exception {
SlideShow slideShow = new XMLSlideShow();
Slide slide = slideShow.createSlide();
int groupLeft = 100;
int groupTop = 50;
int groupWidth = 350;
int groupHeight = 300;
int groupPadding= 10;
GroupShape group = slide.createGroup();
group.setInteriorAnchor(new Rectangle(groupLeft, groupTop, groupWidth, groupHeight));
group.setAnchor(new Rectangle(groupLeft+groupPadding, groupTop+groupPadding, groupWidth-groupPadding, groupHeight-groupPadding));
AutoShape shape = group.createAutoShape();
shape.setShapeType(ShapeType.RECT);
shape.setFillColor(Color.GREEN);
shape.setAnchor(new Rectangle(groupLeft, groupTop, 150, 100));
shape = group.createAutoShape();
shape.setShapeType(ShapeType.TRIANGLE);
shape.setFillColor(Color.RED);
shape.setAnchor(new Rectangle(groupLeft+groupWidth-120, groupTop, 120, 100));
shape = group.createAutoShape();
shape.setShapeType(ShapeType.DONUT);
shape.setFillColor(Color.YELLOW);
shape.setAnchor(new Rectangle(groupLeft, groupTop+groupHeight-90, 90, 90));
shape = group.createAutoShape();
shape.setShapeType(ShapeType.ELLIPSE);
shape.setFillColor(Color.BLUE);
shape.setAnchor(new Rectangle(groupLeft+groupWidth-100, groupTop+groupHeight-100, 100, 100));
FileOutputStream out = new FileOutputStream("CreatePPTXGroupShape.pptx");
slideShow.write(out);
out.close();
}
}
我使用的是 Apache POI 3.16(撰写本文时的最新版本)。在下面的代码片段中,我创建了一个 XSLFGroupShape,然后我用它来创建一堆子形状:
XSLFGroupShape group = slide.createGroup();
XSLFAutoShape cardRect = group.createAutoShape();
cardRect.setShapeType(ShapeType.RECT);
cardRect.setAnchor(rect);
XSLFPictureShape avatarShape = group.createPicture(avatar);
// More shapes added to the group here...
问题如下:在生成的 PowerPoint 文件中,组位置和尺寸似乎未初始化(我选择了内容像素化的矩形;整个矩形及其内容是单个 XSLFGroupShape;注意幻灯片左上角的组操纵器):
我的代码中是否遗漏了任何内容?有没有办法规避或解决这个问题?
GroupShape
需要一个 Anchor
和一个 InteriorAnchor
。并且分组的形状必须适合 GroupShape
。当用户使用组时,PowerPoint
GUI 会自动进行管理。但是 apache poi
需要为此进行正确的设置,因为它只是将程序所说的内容写入文件。
示例:一组形状,宽度为 350,高度为 300,左侧为 100,顶部为 50,每个角都有一个简单的形状。
import java.io.FileOutputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.*;
import java.awt.Rectangle;
import java.awt.Color;
public class CreatePPTXGroupShape {
public static void main(String[] args) throws Exception {
SlideShow slideShow = new XMLSlideShow();
Slide slide = slideShow.createSlide();
int groupLeft = 100;
int groupTop = 50;
int groupWidth = 350;
int groupHeight = 300;
int groupPadding= 10;
GroupShape group = slide.createGroup();
group.setInteriorAnchor(new Rectangle(groupLeft, groupTop, groupWidth, groupHeight));
group.setAnchor(new Rectangle(groupLeft+groupPadding, groupTop+groupPadding, groupWidth-groupPadding, groupHeight-groupPadding));
AutoShape shape = group.createAutoShape();
shape.setShapeType(ShapeType.RECT);
shape.setFillColor(Color.GREEN);
shape.setAnchor(new Rectangle(groupLeft, groupTop, 150, 100));
shape = group.createAutoShape();
shape.setShapeType(ShapeType.TRIANGLE);
shape.setFillColor(Color.RED);
shape.setAnchor(new Rectangle(groupLeft+groupWidth-120, groupTop, 120, 100));
shape = group.createAutoShape();
shape.setShapeType(ShapeType.DONUT);
shape.setFillColor(Color.YELLOW);
shape.setAnchor(new Rectangle(groupLeft, groupTop+groupHeight-90, 90, 90));
shape = group.createAutoShape();
shape.setShapeType(ShapeType.ELLIPSE);
shape.setFillColor(Color.BLUE);
shape.setAnchor(new Rectangle(groupLeft+groupWidth-100, groupTop+groupHeight-100, 100, 100));
FileOutputStream out = new FileOutputStream("CreatePPTXGroupShape.pptx");
slideShow.write(out);
out.close();
}
}