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

使用docx4j将现有幻灯片插入新的pptx演示文稿中

咸育
2023-03-14
// load existing presentation from where slide will be extracted 
PresentationMLPackage presentationMLPackage = PresentationMLPackage.load(new FileInputStream("data/input/" + inFileName + ".pptx"));        
MainPresentationPart mpp = presentationMLPackage.getMainPresentationPart();

for(int i=0; i<mpp.getSlideCount(); i++) {

    // extract slide
    SlidePart sp = mpp.getSlide(i);
    Sld spContent = sp.getContents();

    // extract layout
    String sourceLayoutXml = sp.getSlideLayoutPart().getXML();
    String sourceMasterXml = sp.getSlideLayoutPart().getSlideMasterPart().getXML();

    // create new ppt
    PresentationMLPackage newPpt = PresentationMLPackage.createPackage(); // TODO: other than landscape, 16x9?

    MainPresentationPart mppNewPpt = (MainPresentationPart)newPpt.getParts().getParts().get(
                new PartName("/ppt/presentation.xml"));
    SlideLayoutPart layoutPart = (SlideLayoutPart)newPpt.getParts().getParts().get(
                new PartName("/ppt/slideLayouts/slideLayout1.xml"));

    layoutPart.setContents(
                (SldLayout)XmlUtils.unmarshalString(sourceLayoutXml, Context.jcPML));

    SlideMasterPart masterPart = layoutPart.getSlideMasterPart();
    masterPart.setContents(
                    (SldMaster)XmlUtils.unmarshalString(sourceMasterXml, Context.jcPML));

    // create new blank slide
    SlidePart slidePart = new SlidePart();

    // set content from extracted slide
    slidePart.setContents(spContent);

    // add slide to presentation
    mppNewPpt.addSlide(0, slidePart);

    // set slide layout part for new slide
    slidePart.addTargetPart(layoutPart);

    // save new ppt
    newPpt.save(new FileOutputStream(outDir + "/" + inFileName + "_slide_" + i + ".pptx"));
}

谢谢!

保罗

共有1个答案

唐康安
2023-03-14

问题是图像是单独存储的,需要作为关系添加,并使用相应的Relid引用。

一个“可怜的人”的方法是克隆现有的pptx(OpcPackage clone()),然后删除您不想要的幻灯片。这样做,输出的pptx文件可能仍然包含您不需要的对象(您需要尝试一下并看看)。

否则,您可以使用我们的商业MergePtx组件(Docx4j企业版的一部分)。

 类似资料:
  • 主要思想:用户创建一个带有1张幻灯片的PowerPoint文件,并将此幻灯片插入到已经循环的幻灯片中。我的第一个想法是将.ppt文件转换为图像(例如,使用 http://www.artofsolving.com/opensource/jodconverter/ 或.NET API),然后创建一个闪存应用程序,该应用程序扫描目录中的图像(/转换后的幻灯片)以显示。 但这似乎有点像一个复杂的解决方案,

  • 我想拿一张PowerPoint幻灯片(“源”),并将其插入到另一张已经包含一些内容的PowerPoint幻灯片(“目标”)中,位于源PowerPoint幻灯片中的特定位置。 我已经尝试了几种方法来研究这样做的代码,但是我不断得到将幻灯片合并到PowerPoint演示文稿中的结果,这不是我想要的。我想拿一张现有的幻灯片并将其插入到另一张幻灯片中,就像在现有幻灯片中插入图片一样。 我有另一位同事编写的

  • 我想使用Apache POIJava库将pptx幻灯片拆分为几个幻灯片,每个幻灯片只包含一张幻灯片。 创建一个新的XMLSlideSheet并添加幻灯片,如在几个地方(例如 https://www.tutorialspoint.com/apache_poi_ppt/apache_poi_ppt_merging.htm)所述,对我来说不起作用,因为某些布局没有正确导入:字体被更改,文本的位置被更改等

  • 我正在使用Apache POI,并尝试使用Powerpoint报告自动完成一些任务。更准确地说,我希望从代码中更新. pptx演示文稿中的数据,包括表格。 我已经设法获得了XSLFTable对象(感谢这个页面:如何用apache-poi 3.9修改pptx文件中表格的单元格值?),但现在我正在尝试更新表结构。 不幸的是,我不知道如何在该表中创建或删除行(或列)。方法 返回一个列表,但它似乎是不可修

  • 问题内容: 到目前为止,我只有一个有效的代码可以从ppt幻灯片笔记中检索文本 但是,如何从pptx幻灯片笔记中检索文本? 问题答案: 经过不断的反复试验,找到了解决方案。

  • 到目前为止,我只有一个从ppt幻灯片笔记中检索文本的工作代码 但如何从pptx幻灯片笔记中检索文本呢?