设置文本时丢失形状布局
lost Shape layout when set text
我正在使用 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");
}
}
}
...
}
这工作得很好,但是当我更改形状的文本时,此形状的定义布局会自动丢失。有什么办法可以避免这种情况吗?
我已经解决了我的问题:
您必须明确保存布局设置。稍后当您编辑文本时,您必须设置这些值。
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);
我正在使用 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");
}
}
}
...
}
这工作得很好,但是当我更改形状的文本时,此形状的定义布局会自动丢失。有什么办法可以避免这种情况吗?
我已经解决了我的问题: 您必须明确保存布局设置。稍后当您编辑文本时,您必须设置这些值。
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);