当前位置: 首页 > 知识库问答 >
问题:

Apache POI XSLF创建部分

红富
2023-03-14

我正在努力在apache POI中创建部分。我希望能够使用幻灯片定义部分,我该如何做到这一点?到目前为止,我可以毫无问题地附加幻灯片。

这是演示文稿中保存为XML格式的PowerPoint部分,您可以从中看到各部分是如何存储的:

<pkg:part pkg:name="/ppt/presentation.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml">
    <pkg:xmlData>
        <p:presentation xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" showSpecialPlsOnTitleSld="0" embedTrueTypeFonts="1" saveSubsetFonts="1">
            (... cut out unrelevant nodes...)
            <p:sldIdLst>
                <p:sldId id="296" r:id="rId10"/>
                <p:sldId id="312" r:id="rId11"/>
                <p:sldId id="274" r:id="rId12"/>
                <p:sldId id="311" r:id="rId13"/>
                <p:sldId id="275" r:id="rId14"/>
                <p:sldId id="276" r:id="rId15"/>
                <p:sldId id="317" r:id="rId16"/>
                <p:sldId id="313" r:id="rId17"/>
                <p:sldId id="318" r:id="rId18"/>
                <p:sldId id="319" r:id="rId19"/>
                <p:sldId id="307" r:id="rId20"/>
                <p:sldId id="314" r:id="rId21"/>
                <p:sldId id="315" r:id="rId22"/>
                <p:sldId id="321" r:id="rId23"/>
                <p:sldId id="320" r:id="rId24"/>
                <p:sldId id="308" r:id="rId25"/>
                <p:sldId id="322" r:id="rId26"/>
                <p:sldId id="303" r:id="rId27"/>
                <p:sldId id="264" r:id="rId28"/>
                <p:sldId id="300" r:id="rId29"/>
                <p:sldId id="287" r:id="rId30"/>
                <p:sldId id="309" r:id="rId31"/>
                <p:sldId id="289" r:id="rId32"/>
            </p:sldIdLst>

            <p:extLst>
                <p:ext uri="{521415D9-36F7-43E2-AB2F-B90AF26B5E84}">
                    <p14:sectionLst xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main">
                        <p14:section name="Default Section" id="{F7FF9A22-6035-4F7F-86B4-79EDB5AF0A91}">
                            <p14:sldIdLst>
                                <p14:sldId id="296"/>
                            </p14:sldIdLst>
                        </p14:section>
                        <p14:section name="PPT section example" id="{376F793D-518A-4B6E-AAA6-8CD5D37CFC8B}">
                            <p14:sldIdLst>
                                <p14:sldId id="312"/>
                                <p14:sldId id="274"/>
                                <p14:sldId id="311"/>
                                <p14:sldId id="275"/>
                                <p14:sldId id="276"/>
                                <p14:sldId id="317"/>
                                <p14:sldId id="313"/>
                                <p14:sldId id="318"/>
                                <p14:sldId id="319"/>
                                <p14:sldId id="307"/>
                                <p14:sldId id="314"/>
                                <p14:sldId id="315"/>
                                <p14:sldId id="321"/>
                                <p14:sldId id="320"/>
                                <p14:sldId id="308"/>
                                <p14:sldId id="322"/>
                                <p14:sldId id="303"/>
                                <p14:sldId id="264"/>
                                <p14:sldId id="300"/>
                                <p14:sldId id="287"/>
                                <p14:sldId id="309"/>
                                <p14:sldId id="289"/>
                            </p14:sldIdLst>
                        </p14:section>
                    </p14:sectionLst>
                </p:ext> (...more contents not relevant I guess ...)

有谁知道如何在Apache POI中创建一个部分并附加幻灯片?之后如何附加多个部分和单个幻灯片?任何帮助赞赏。

共有1个答案

唐向荣
2023-03-14

好吧,所以我管理了整个事情:)您需要创建一个默认部分,如下所示:

    CTExtensionList extensionsList = ppt.getCTPresentation().getExtLst();//create default section            
    CTExtension extension = extensionsList.insertNewExt(0);
    extension.setUri("{521415D9-36F7-43E2-AB2F-B90AF26B5E84}");
    Node ext = extension.getDomNode();
    Element sectionLst = ext.getOwnerDocument().createElementNS(p14Xmlns, "p14:sectionLst");
    sectionLst.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:p14", p14Xmlns);
    ext.appendChild(sectionLst);
    Element section = sectionLst.getOwnerDocument().createElementNS(p14Xmlns, "p14:section");
    section.setAttribute("name", "Default section");
    section.setAttribute("id", "{" + UUID.randomUUID().toString().toUpperCase() + "}");
    Element sldIdLst = section.getOwnerDocument().createElementNS(p14Xmlns, "p14:sldIdLst");
    section.appendChild(sldIdLst);
    sectionLst.appendChild(section);
    return sldIdLst;

然后,如果需要,您可以使用此方法创建其他部分:

私有元素创建节(Element sldIdLst,节点父节点){String sectionName = ""; if(parent.getAttributes () ! = null

    Element section = sectionLst.getOwnerDocument().createElementNS(p14Xmlns, "p14:section");
    section.setAttribute("name", sectionName);
    section.setAttribute("id", "{" + UUID.randomUUID().toString().toUpperCase() + "}");
    Element newSldIdLst = section.getOwnerDocument().createElementNS(p14Xmlns, "p14:sldIdLst");
    section.appendChild(newSldIdLst);
    sectionLst.appendChild(section);
    sldIdLst = newSldIdLst;
    return sldIdLst;
}

然后,我必须手动将XSLSlide与sldIdLst关联起来:

 XSLFSlide slide = createSlideFromXml(parent, ppt);
        if (slide != null)
        {
            List<CTSlideIdListEntry> sldIdList = ppt.getCTPresentation().getSldIdLst().getSldIdList();
            long slideInternalId = 0;
            for (CTSlideIdListEntry entry : sldIdList)
            {
                if (entry.getId2().equals(slide.getPackageRelationship().getId()))
                {
                    slideInternalId = entry.getId();
                    break;
                }
            }
            Element sldId = sldIdLst.getOwnerDocument().createElementNS("http://schemas.microsoft.com/office/powerpoint/2010/main", "p14:sldId");
            sldId.setAttribute("id", String.valueOf(slideInternalId));
            sldIdLst.appendChild(sldId);
        }

我希望你能明白这个想法。

 类似资料:
  • 控制台-部门-创建 接口URL {youke-url}/console/Index.php?c=department&a=create&timestamp=1607677497&access_key=abc&sign=abea261d1d33b1ec347801e4cce7fc1f73b5a8cc 请求方式 POST Content-Type form-data 请求Query参数 参数 示例值

  • 问题内容: 因此,我们具有以下形式的XSD类型: 表示XML: xjc产生几乎正确的结果。唯一令人讨厌的是,“ Bars”被创建为存储Bars列表的内部类。无论如何,在Foo中将Bars列为列表,同时仍保留上面的XML? 问题答案: 另一种方法是删除周围的 元素,XML看起来不再那么漂亮了,但是它将使Java代码更易于阅读。与xjc的简单绑定(请参阅 http://jaxb.java.net/no

  • 样式表的作用是控制网页样式,只有创建样式表,并把它应用到网页中,才能发挥样式表的作用。 创建外部样式表 外部样式表,是在网页外部的样式表文件中定义的样式。由于这些样式并不是HTML文档的一部分,而是在HTML文档的外部独立存在,故称外部样式表。 样式表文件是纯文本文件,可以使用任何文本编辑器来编辑,这里使用Windows自带的记事本,来创建外部样式表。步骤如下: 1)在Windows系统中,点击开

  • 问题内容: 我有一个CHAR(250)列用作varchar(24)列的外键。 在MySQL中,我记得我可以创建一个指定column(24)的索引,以便在最左边的24个字符上创建索引。在MS SQL Server上似乎无法实现。 我的问题是这样的: 是否可以在SQL Server 2008上使用索引视图为该列的子字符串建立索引,如果是,则它会对表的性能产生任何副作用吗? 问题答案: 您可以创建一个持

  • 问题内容: 我想将Python函数的某些参数提前“传递”给另一个函数。 这是我正在做的简化: 我不想使用某种形式的传递,以后再进行分解,因为传递给我的函数不知道传递给它。 对于小组项目来说,这有点太聪明了……是否有更直接或更Python的方法来执行此操作? 谢谢! 问题答案: 这称为currying或部分应用程序。您可以使用内置的functools.partial()。像下面这样的东西会做你想要的

  • 以前我只使用JSP和ApacheTiles,现在我第一次尝试创建Thymeleaf模板。我面临的问题是,我不知道如何将自定义页眉、页脚和其他部分插入默认值。html。下面是代码示例。 default.html: 默认情况下。html I有“siteContent”,用于插入应用程序的所有html文件,以及“header”、“sideMenu”和“footer”部分,这些部分必须在单独的相应html