在 JavaScript 中高效合并演示文稿

演示文稿合并

当您将一个演示文稿合并到另一个演示文稿时,实际上是在单个演示文稿中合并它们的幻灯片以获得一个文件。

可以合并的内容

使用 Aspose.Slides,您可以合并

  • 整个演示文稿。所有演示文稿的幻灯片最终汇集到一个演示文稿中
  • 特定幻灯片。所选幻灯片最终汇集到一个演示文稿中
  • 同一格式的演示文稿(PPT 到 PPT、PPTX 到 PPTX 等)以及不同格式的演示文稿(PPT 到 PPTX、PPTX 到 ODP 等)相互合并。

合并选项

您可以应用以下选项来确定

  • 输出演示文稿中的每个幻灯片保持唯一样式
  • 为输出演示文稿中的所有幻灯片使用特定样式

要合并演示文稿,Aspose.Slides 提供了 addClone 方法(来自 SlideCollection 类)。addClone 方法有多种实现形式,可定义演示文稿合并过程的参数。每个 Presentation 对象都有一个 Slides 集合,因此可以从目标演示文稿调用 addClone 方法以合并幻灯片。

addClone 方法返回一个 Slide 对象,该对象是源幻灯片的克隆。输出演示文稿中的幻灯片仅是源幻灯片的副本。因此,您可以更改生成的幻灯片(例如,应用样式、格式选项或布局),而无需担心源演示文稿受到影响。

合并演示文稿

Aspose.Slides 提供 AddClone(ISlide) 方法,允许您在保留幻灯片布局和样式(默认参数)的情况下合并幻灯片。

此 JavaScript 代码展示了如何合并演示文稿:

let pres1 = new aspose.slides.Presentation("pres1.pptx");
try {
    let pres2 = new aspose.slides.Presentation("pres2.pptx");
    try {
        for (let i = 0; i < pres2.getSlides().size(); i++) {
            let slide = pres2.getSlides().get_Item(i);
            pres1.getSlides().addClone(slide);
        }
    } finally {
        if (pres2 != null) {
            pres2.dispose();
        }
    }
    pres1.save("combined.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres1 != null) {
        pres1.dispose();
    }
}

使用幻灯片母版合并演示文稿

Aspose.Slides 提供 AddClone(ISlide, IMasterSlide, boolean) 方法,允许您在应用幻灯片母版模板的同时合并幻灯片。这样,必要时可以更改输出演示文稿中幻灯片的样式。

此 JavaScript 代码演示了上述操作:

let pres1 = new aspose.slides.Presentation("pres1.pptx");
try {
    let pres2 = new aspose.slides.Presentation("pres2.pptx");
    try {
        for (let i = 0; i < pres2.getSlides().size(); i++) {
            let slide = pres2.getSlides().get_Item(i);
            pres1.getSlides().addClone(slide, pres2.getMasters().get_Item(0), true);
        }
    } finally {
        if (pres2 != null) {
            pres2.dispose();
        }
    }
    pres1.save("combined.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres1 != null) {
        pres1.dispose();
    }
}

如果希望输出演示文稿中的幻灯片采用不同的布局,请在合并时改用 addClone(ISlide, ILayoutSlide) 方法。

从演示文稿合并特定幻灯片

从多个演示文稿合并特定幻灯片对于创建自定义幻灯片组非常有用。Aspose.Slides for Node.js via Java 允许您只选择并导入所需的幻灯片。API 保留原始幻灯片的格式、布局和设计。

以下 JavaScript 代码创建一个新演示文稿,添加来自两个其他演示文稿的标题幻灯片,并将结果保存为文件:

function getTitleSlide(presentation) {
  for (let i = 0; i < presentation.getSlides().size(); i++) {
    let slide = presentation.getSlides().get_Item(i);
    if (slide.getLayoutSlide().getLayoutType() == aspose.slides.SlideLayoutType.Title) {
      return slide;
    }
  }
  return null;
}
let presentation = new aspose.slides.Presentation();
let presentation1 = new aspose.slides.Presentation("presentation1.pptx");
let presentation2 = new aspose.slides.Presentation("presentation2.pptx");
try {
    presentation.getSlides().removeAt(0);
    
    let slide1 = getTitleSlide(presentation1);

    if (slide1 != null)
        presentation.getSlides().addClone(slide1);

    let slide2 = getTitleSlide(presentation2);

    if (slide2 != null)
        presentation.getSlides().addClone(slide2);

    presentation.save("combined.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation2.dispose();
    presentation1.dispose();
    presentation.dispose();
}

使用幻灯片布局合并演示文稿

此 JavaScript 代码展示了如何在合并演示文稿时为幻灯片应用首选布局,以获得一个输出演示文稿:

let pres1 = new aspose.slides.Presentation("pres1.pptx");
try {
    let pres2 = new aspose.slides.Presentation("pres2.pptx");
    try {
        for (let i = 0; i < pres2.getSlides().size(); i++) {
            let slide = pres2.getSlides().get_Item(i);
            pres1.getSlides().addClone(slide, pres2.getLayoutSlides().get_Item(0));
        }
    } finally {
        if (pres2 != null) {
            pres2.dispose();
        }
    }
    pres1.save("combined.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres1 != null) {
        pres1.dispose();
    }
}

合并不同幻灯片尺寸的演示文稿

要合并尺寸不同的两个演示文稿,需要先调整其中一个演示文稿的尺寸,使其与另一个演示文稿的尺寸匹配。

此示例代码演示了上述操作:

let pres1 = new aspose.slides.Presentation("pres1.pptx");
try {
    let pres2 = new aspose.slides.Presentation("pres2.pptx");
    try {
        pres2.getSlideSize().setSize(pres1.getSlideSize().getSize().getWidth(), pres1.getSlideSize().getSize().getHeight(), aspose.slides.SlideSizeScaleType.EnsureFit);
        for (let i = 0; i < pres2.getSlides().size(); i++) {
            let slide = pres2.getSlides().get_Item(i);
            pres1.getSlides().addClone(slide);
        }
    } finally {
        if (pres2 != null) {
            pres2.dispose();
        }
    }
    pres1.save("combined.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres1 != null) {
        pres1.dispose();
    }
}

将幻灯片合并到演示文稿章节

此 JavaScript 代码展示了如何将特定幻灯片合并到演示文稿的某个章节:

let pres1 = new aspose.slides.Presentation("pres1.pptx");
try {
    let pres2 = new aspose.slides.Presentation("pres2.pptx");
    try {
        for (let i = 0; i < pres2.getSlides().size(); i++) {
            let slide = pres2.getSlides().get_Item(i);
            pres1.getSlides().addClone(slide, pres1.getSections().get_Item(0));
        }
    } finally {
        if (pres2 != null) {
            pres2.dispose();
        }
    }
    pres1.save("combined.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres1 != null) {
        pres1.dispose();
    }
}

该幻灯片将被添加到章节的末尾。

常见问题

合并时会保留演讲者备注吗?

会的。克隆幻灯片时,Aspose.Slides 会保留所有幻灯片元素,包括备注、格式和动画。

评论及其作者会被转移吗?

评论作为幻灯片内容的一部分会随幻灯片一起复制。评论作者标签会以评论对象的形式保留在生成的演示文稿中。

如果源演示文稿受密码保护怎么办?

必须通过 LoadOptions.setPassword 使用密码打开 /slides/nodejs-java/password-protected-presentation/。加载后,这些幻灯片可以安全地克隆到未受保护的目标文件(或同样受保护的文件)中。

合并操作的线程安全性如何?

请勿在 多个线程 中使用同一个 Presentation 实例。推荐的规则是“一个文档‑一个线程”;不同文件可以在各自的线程中并行处理。

另见

Aspose 提供了一个 FREE Online Collage Maker。使用该在线服务,您可以合并 JPG to JPG 或 PNG 到 PNG 的图像,创建 photo grids 等。

请查看 Aspose FREE Online Merger。它允许您在相同格式(例如 PPT 到 PPT、PPTX 到 PPTX)或跨不同格式(例如 PPT 到 PPTX、PPTX 到 ODP)之间合并 PowerPoint 演示文稿。

Aspose FREE Online Merger