在 Java 中克隆簡報投影片

簡介

複製(Cloning)是製作某物精確副本或複製的過程。Aspose.Slides for Java 也可以對任何投影片進行複製或克隆,然後將該克隆投影片插入當前或任何其他已開啟的簡報中。投影片克隆的過程會產生一個新投影片,開發人員可以對其進行修改,而不會更改原始投影片。有多種克隆投影片的方式:

  • 在簡報內的結尾處克隆。
  • 在簡報內的其他位置克隆。
  • 在另一個簡報的結尾處克隆。
  • 在另一個簡報的其他位置克隆。
  • 在另一個簡報的特定位置克隆。

在 Aspose.Slides for Java 中,由 Presentation 物件所公開的 (ISlide 物件集合) 提供 addCloneinsertClone 方法,以執行上述投影片克隆類型

在簡報的結尾處克隆投影片

如果您想克隆投影片,並在同一簡報檔案的現有投影片結尾處使用它,請依照以下步驟使用 addClone 方法:

  1. 建立 Presentation 類別的實例。
  2. 透過參考 Presentation 物件所公開的 Slides 集合,實例化 ISlideCollection 類別。
  3. 呼叫由 ISlideCollection 物件所公開的 addClone 方法,並將要克隆的投影片作為參數傳遞給該方法。
  4. 寫入已修改的簡報檔案。

在下列範例中,我們將投影片(位於簡報的第一個位置—零索引)克隆至簡報的結尾。

// 實例化代表簡報檔案的 Presentation 類別
Presentation pres = new Presentation("CloneWithinSamePresentationToEnd.pptx");
try {
    // 將目標投影片克隆至同一簡報中投影片集合的末端
    ISlideCollection slds = pres.getSlides();

    slds.addClone(pres.getSlides().get_Item(0));

    // 將已修改的簡報寫入磁碟
    pres.save("Aspose_CloneWithinSamePresentationToEnd_out.pptx", SaveFormat.Pptx);
} finally {
    pres.dispose();
}

在簡報內的其他位置克隆投影片

如果您想克隆投影片,並在同一簡報檔案的不同位置使用它,請使用 insertClone 方法:

  1. 建立 Presentation 類別的實例。
  2. 透過參考 Slides 集合,實例化該類別。
  3. 呼叫由 ISlideCollection 物件所公開的 insertClone 方法,並將要克隆的投影片與新位置的索引一起作為參數傳遞給該方法。
  4. 將修改後的簡報寫入為 PPTX 檔案。

在下列範例中,我們將投影片(位於零索引—位置 1—的投影片)克隆至索引 1—位置 2—的投影片。

// 實例化代表簡報檔案的 Presentation 類別
Presentation pres = new Presentation("CloneWithInSamePresentation.pptx");
try {
    // 將目標投影片克隆至同一簡報中投影片集合的末端
    ISlideCollection slds = pres.getSlides();

    // 將目標投影片克隆至同一簡報中指定索引的位置
    slds.insertClone(2, pres.getSlides().get_Item(1));

    // 將已修改的簡報寫入磁碟
    pres.save("Aspose_CloneWithInSamePresentation_out.pptx", SaveFormat.Pptx);
} finally {
    pres.dispose();
}

在另一個簡報的結尾處克隆投影片

如果您需要從一個簡報克隆投影片到另一個簡報檔案的結尾處:

  1. 建立包含來源投影片的 Presentation 類別實例。
  2. 建立包含目標簡報的 Presentation 類別實例。
  3. 透過參考目標簡報的 Slides 集合,實例化 ISlideCollection 類別。
  4. 呼叫由 ISlideCollection 物件所公開的 addClone 方法,並將來源簡報的投影片作為參數傳遞給該方法。
  5. 寫入已修改的目標簡報檔案。

在下列範例中,我們將投影片(來自來源簡報的第一個索引)克隆至目標簡報的結尾。

// 實例化 Presentation 類別以載入來源簡報檔案
Presentation srcPres = new Presentation("CloneAtEndOfAnother.pptx");
try {
    // 實例化用於目標 PPTX 的 Presentation 類別(投影片將被克隆至此)
    Presentation destPres = new Presentation();
    try {
        // 將來源簡報的目標投影片克隆至目標簡報中投影片集合的末端
        ISlideCollection slds = destPres.getSlides();

        slds.addClone(srcPres.getSlides().get_Item(0));

        // 將目標簡報寫入磁碟
        destPres.save("Aspose2_out.pptx", SaveFormat.Pptx);
    } finally {
        destPres.dispose();
    }
} finally {
    srcPres.dispose();
}

在另一個簡報的其他位置克隆投影片

如果您需要從一個簡報克隆投影片到另一個簡報檔案的特定位置:

  1. 建立包含來源投影片的 Presentation 類別實例。
  2. 建立包含目標簡報的 Presentation 類別實例。
  3. 透過參考目標簡報的 Slides 集合,實例化 ISlideCollection 類別。
  4. 呼叫由 ISlideCollection 物件所公開的 insertClone 方法,並將來源簡報的投影片與期望的位置一起作為參數傳遞給該方法。
  5. 寫入已修改的目標簡報檔案。

在下列範例中,我們將投影片(來自來源簡報的零索引)克隆至目標簡報的索引 1(位置 2)。

// 實例化 Presentation 類別以載入來源簡報檔案
Presentation srcPres = new Presentation("CloneAtEndOfAnother.pptx");
try {
    // 實例化用於目標 PPTX 的 Presentation 類別(投影片將被克隆至此)
    Presentation destPres = new Presentation();
    try {
        // 將來源簡報的目標投影片克隆至目標簡報中投影片集合的末端
        ISlideCollection slds = destPres.getSlides();

        slds.insertClone(2, srcPres.getSlides().get_Item(0));

        // 將目標簡報寫入磁碟
        destPres.save("Aspose2_out.pptx", SaveFormat.Pptx);
    } finally {
        destPres.dispose();
    }
} finally {
    srcPres.dispose();
}

在另一個簡報的特定位置克隆投影片

如果您需要從一個簡報克隆投影片(含母投影片)到另一個簡報,必須先將來源簡報的目標母投影片克隆至目標簡報,然後使用該母投影片進行投影片克隆。方法 addClone(ISlide, IMasterSlide, boolean) 期待的是目標簡報的母投影片,而非來源簡報的。請依照以下步驟克隆帶母投影片的投影片:

  1. 建立包含來源投影片的 Presentation 類別實例。
  2. 建立包含目標簡報的 Presentation 類別實例。
  3. 取得要克隆的投影片及其母投影片。
  4. 透過參考目標簡報的 Masters 集合,實例化 IMasterSlideCollection 類別。
  5. 呼叫由 IMasterSlideCollection 物件所公開的 addClone 方法,將來源 PPTX 的母投影片作為參數傳遞,以克隆母投影片。
  6. 透過參考目標簡報的 Slides 集合,實例化 ISlideCollection 類別。
  7. 呼叫由 ISlideCollection 物件所公開的 addClone 方法,將來源投影片與已克隆的母投影片一起作為參數傳遞,以完成克隆。
  8. 寫入已修改的目標簡報檔案。

在下列範例中,我們將帶有母投影片的投影片(位於來源簡報的零索引)克隆至目標簡報的結尾,使用來源投影片的母投影片。

// 實例化 Presentation 類別以載入來源簡報檔案
Presentation srcPres = new Presentation("CloneToAnotherPresentationWithMaster.pptx");
try {
    // 實例化用於目標簡報的 Presentation 類別(投影片將被克隆至此)
    Presentation destPres = new Presentation();
    try {
        // 從來源簡報的投影片集合中實例化 ISlide,並同時取得
        // 母投影片
        ISlide SourceSlide = srcPres.getSlides().get_Item(0);
        IMasterSlide SourceMaster = SourceSlide.getLayoutSlide().getMasterSlide();

        // 從來源簡報克隆所需的母投影片至母投影片集合中
        // 目標簡報
        IMasterSlideCollection masters = destPres.getMasters();
        IMasterSlide DestMaster = SourceSlide.getLayoutSlide().getMasterSlide();

        // 從來源簡報克隆所需的母投影片至母投影片集合中
        // 目標簡報
        IMasterSlide iSlide = masters.addClone(SourceMaster);

        // 從來源簡報以所需的母投影片克隆指定投影片至
        // 目標簡報的投影片集合末端
        ISlideCollection slds = destPres.getSlides();
        slds.addClone(SourceSlide, iSlide, true);

        // 將目標簡報儲存至磁碟
        destPres.save("CloneToAnotherPresentationWithMaster_out.pptx", SaveFormat.Pptx);
    } finally {
        destPres.dispose();
    }
} finally {
    srcPres.dispose();
}

在指定節的結尾處克隆投影片

如果您想在同一簡報的不同節中克隆投影片,請使用由 ISlideCollection 介面所公開的 addClone 方法。Aspose.Slides for Java 允許從第一節克隆投影片,然後將該克隆投影片插入同一簡報的第二節。

以下程式碼片段示範如何克隆投影片並將其插入指定節。

IPresentation presentation = new Presentation();
try {
    presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 200, 50, 300, 100);
    presentation.getSections().addSection("Section 1", presentation.getSlides().get_Item(0));

    ISection section2 = presentation.getSections().appendEmptySection("Section 2");
    presentation.getSlides().addClone(presentation.getSlides().get_Item(0), section2);
    
	// 將目標簡報寫入磁碟
    presentation.save(dataDir + "CloneSlideIntoSpecifiedSection.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

常見問題

講者備註與審閱者評論會被克隆嗎?

是的。備註頁與審閱評論會包含在克隆中。如果您不想保留它們,請移除它們

圖表及其資料來源如何處理?

圖表物件、格式以及內嵌資料都會被複製。如果圖表連結到外部來源(例如 OLE 嵌入的活頁簿),該連結會以OLE 物件形式保留。移動檔案後,請確認資料可用性並刷新行為。

我可以控制克隆的插入位置和節嗎?

可以。您可以在特定投影片索引插入克隆,並將其放入選定的。如果目標節不存在,請先建立該節,然後再將投影片移入其中。