我正在使用 Apache POI 3.12 与 Powerpoint 进行互动。 我打开一个现有的Powerpoint实例:
File file = new File("PATH_TO_FILE...");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
在这个Powerpoint应用程序中,我定义了一些命名形状: 在运行时,我想替换某些值:
XSLFSlide[] slide = ppt.getSlides();
for (int i = 0; i < slide.length; i++) {
XSLFShape[] sh = slide[i].getShapes();
for (int j = 0; j < sh.length; j++) {
if ("SHAPE_NAME".equals(sh[j].getShapeName())) {
if (sh[j] instanceof XSLFAutoShape) {
XSLFAutoShape shape = (XSLFAutoShape) sh[j];
shape.setText("BlaBla");
}
}
}
...
}
这非常有效,但是当我更改Shape的文本时,会自动为此Shape丢失定义的布局。有办法防止这种情况吗?
答案 0 :(得分:0)
我已经解决了我的问题: 您必须明确保存布局设置。稍后编辑文本时,必须设置这些值。
Color fontColor = null;
String fontFamily = null;
double fontSize = 0.0;
boolean italic = false;
boolean bold = false;
boolean underline = false;
for (XSLFTextParagraph paragraph : autoShape.getTextParagraphs()) {
for (XSLFTextRun text : paragraph.getTextRuns()) {
fontColor = text.getFontColor();
fontFamily = text.getFontFamily();
fontSize = text.getFontSize();
italic = text.isItalic();
bold = text.isBold();
underline = text.isUnderline();
}
}
autoShape.clearText();
XSLFTextParagraph addNewTextParagraph = autoShape.addNewTextParagraph();
XSLFTextRun addNewTextRun = addNewTextParagraph.addNewTextRun();
addNewTextRun.setText(values.get(0)[1]);
addNewTextRun.setFontColor(fontColor);
addNewTextRun.setFontFamily(fontFamily);
addNewTextRun.setFontSize(fontSize);
addNewTextRun.setItalic(italic);
addNewTextRun.setBold(bold);
addNewTextRun.setUnderline(underline);