在 JavaScript 中高效合并演示文稿
演示文稿合并
当您将一个演示文稿合并到另一个演示文稿时,实际上是在单个演示文稿中合并它们的幻灯片以获得一个文件。
信息
大多数演示文稿程序(PowerPoint 或 OpenOffice)缺少允许用户以此方式合并演示文稿的功能。
Aspose.Slides for Node.js via Java,然而,Aspose.Slides for Node.js via Java 允许您以不同方式合并演示文稿。您可以合并包含所有形状、样式、文本、格式、注释、动画等的演示文稿,而无需担心质量或数据丢失。
另见
可以合并的内容
使用 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 方法的 allowCloneMissingLayout 布尔参数设置为 true,则使用源幻灯片的布局。否则,将抛出 PptxEditException。
如果希望输出演示文稿中的幻灯片采用不同的布局,请在合并时改用 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 演示文稿。
