设置文本时丢失形状布局

lost Shape layout when set text

我正在使用 Apache POI 3.12Powerpoint 进行交互。 我打开一个现有的 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);