在 PHP 中高效合併簡報

概覽

Aspose.Slides 允許您透過將一個簡報的投影片克製到另一個簡報中來合併簡報。本文章說明如何合併整份簡報或選取的投影片、在合併過程中使用投影片母片或特定版面配置、處理擁有不同投影片大小的簡報,以及將合併的投影片加入簡報的節 (section)。同時也涵蓋與合併內容相關的實務注意事項,包括講者備註、評論、受密碼保護的來源檔案,以及執行緒使用情形。

可以合併的項目

使用 Aspose.Slides,您可以合併

  • 整份簡報。所有簡報的投影片會匯入到同一個簡報中
  • 特定投影片。選取的投影片會匯入到同一個簡報中
  • 相同格式的簡報(例如 PPT 轉 PPT、PPTX 轉 PPTX 等)以及不同格式的簡報(例如 PPT 轉 PPTX、PPTX 轉 ODP 等)之間的相互合併。

合併選項

您可以套用選項以決定是否

  • 輸出簡報中的每張投影片保留其獨特樣式
  • 為所有輸出簡報的投影片使用相同的特定樣式。

要合併簡報,Aspose.Slides 提供了 addClone 方法(來自 SlideCollection 類別)。addClone 方法有多種實作,可定義簡報合併過程的參數。每個 Presentation 物件都有一個 slide 集合,您可以從欲合併投影片的簡報呼叫 addClone 方法。

addClone 方法會回傳一個 Slide 物件,即來源投影片的克隆。輸出簡報中的投影片僅是來源投影片的副本。因此,您可以對產生的投影片進行變更(例如套用樣式、格式選項或版面配置),而不必擔心會影響來源簡報。

合併簡報

Aspose.Slides 提供了 addClone(Slide) 方法,讓您在保持投影片版面與樣式的情況下(預設參數)合併投影片。

此 PHP 程式碼示範如何合併簡報:

  $pres1 = new Presentation("pres1.pptx");
  try {
    $pres2 = new Presentation("pres2.pptx");
    try {
      foreach($pres2->getSlides() as $slide) {
        $pres1->getSlides()->addClone($slide);
      }
    } finally {
      if (!java_is_null($pres2)) {
        $pres2->dispose();
      }
    }
    $pres1->save("combined.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres1)) {
      $pres1->dispose();
    }
  }

使用投影片母片合併簡報

Aspose.Slides 提供了 addClone(Slide, MasterSlide, boolean) 方法,讓您在套用投影片母片簡報範本的同時合併投影片。如此一來,若有需要,您即可變更輸出簡報中投影片的樣式。

此程式碼示範上述操作:

  $pres1 = new Presentation("pres1.pptx");
  try {
    $pres2 = new Presentation("pres2.pptx");
    try {
      foreach($pres2->getSlides() as $slide) {
        $pres1->getSlides()->addClone($slide, $pres2->getMasters()->get_Item(0), true);
      }
    } finally {
      if (!java_is_null($pres2)) {
        $pres2->dispose();
      }
    }
    $pres1->save("combined.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres1)) {
      $pres1->dispose();
    }
  }

如果您希望輸出簡報中的投影片使用不同的投影片版面,合併時請改為使用 addClone(Slide, LayoutSlide) 方法。

從簡報中合併特定投影片

從多個簡報中合併特定投影片對於建立自訂投影片組合非常有用。Aspose.Slides for PHP via Java 讓您僅選取並匯入所需的投影片。API 會保留原始投影片的格式、版面與設計。

以下 PHP 程式碼會建立新簡報、從另外兩個簡報加入標題投影片,並將結果儲存為檔案:

function getTitleSlide(Presentation $presentation) {
    for ($i = 0; $i < java_values($presentation->getSlides()->size()); $i++) {
        $slide = $presentation->getSlides()->get_Item($i);
        if (java_values($slide->getLayoutSlide()->getLayoutType()) === SlideLayoutType::Title) {
            return $slide;
        }
    }
    return null;
}
$presentation = new Presentation();
$presentation1 = new Presentation($folderPath . "presentation1.pptx");
$presentation2 = new Presentation($folderPath . "presentation2.pptx");
try {
    $presentation->getSlides()->removeAt(0);
    
    $slide1 = getTitleSlide($presentation1);

    if ($slide1 != null)
        $presentation->getSlides()->addClone($slide1);

    $slide2 = getTitleSlide($presentation2);

    if ($slide2 != null)
        $presentation->getSlides()->addClone($slide2);

    $presentation->save($folderPath . "combined.pptx", SaveFormat::Pptx);
} finally {
    $presentation2->dispose();
    $presentation1->dispose();
    $presentation->dispose();
}

使用投影片版面合併簡報

此 PHP 程式碼示範如何在合併簡報的投影片時套用您偏好的投影片版面,以取得單一輸出簡報:

  $pres1 = new Presentation("pres1.pptx");
  try {
    $pres2 = new Presentation("pres2.pptx");
    try {
      foreach($pres2->getSlides() as $slide) {
        $pres1->getSlides()->addClone($slide, $pres2->getLayoutSlides()->get_Item(0));
      }
    } finally {
      if (!java_is_null($pres2)) {
        $pres2->dispose();
      }
    }
    $pres1->save("combined.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres1)) {
      $pres1->dispose();
    }
  }

合併不同投影片尺寸的簡報

若要合併兩個投影片尺寸不同的簡報,必須將其中一個簡報的尺寸調整至與另一個簡報相同。

以下範例程式碼示範上述操作:

  $pres1 = new Presentation("pres1.pptx");
  try {
    $pres2 = new Presentation("pres2.pptx");
    try {
      $pres2->getSlideSize()->setSize($pres1->getSlideSize()->getSize()->getWidth(), $pres1->getSlideSize()->getSize()->getHeight(), SlideSizeScaleType::EnsureFit);
      foreach($pres2->getSlides() as $slide) {
        $pres1->getSlides()->addClone($slide);
      }
    } finally {
      if (!java_is_null($pres2)) {
        $pres2->dispose();
      }
    }
    $pres1->save("combined.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres1)) {
      $pres1->dispose();
    }
  }

將投影片合併至簡報節

此 PHP 程式碼示範如何將特定投影片合併至簡報的節中:

  $pres1 = new Presentation("pres1.pptx");
  try {
    $pres2 = new Presentation("pres2.pptx");
    try {
      foreach($pres2->getSlides() as $slide) {
        $pres1->getSlides()->addClone($slide, $pres1->getSections()->get_Item(0));
      }
    } finally {
      if (!java_is_null($pres2)) {
        $pres2->dispose();
      }
    }
    $pres1->save("combined.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres1)) {
      $pres1->dispose();
    }
  }

該投影片會被加入至該節的末端。

另請參閱

Aspose 提供一個 FREE Online Collage Maker。使用此線上服務,您可以合併 JPG to JPG 或 PNG 到 PNG 圖片、建立 photo grids,以及其他功能。

請查看 Aspose FREE Online Merger。它可讓您合併相同格式的 PowerPoint 簡報(例如 PPT 轉 PPT、PPTX 轉 PPTX)或不同格式的簡報(例如 PPT 轉 PPTX、PPTX 轉 ODP)。

Aspose FREE Online Merger

常見問題

合併簡報時,投影片數量有任何限制嗎?

沒有嚴格的限制。Aspose.Slides 能處理大型檔案,但效能取決於檔案大小與系統資源。對於極大的簡報,建議使用 64 位元 JVM 並配置足夠的堆記憶體。

我可以合併含嵌入式影片或音訊的簡報嗎?

可以,Aspose.Slides 會保留投影片中嵌入的多媒體內容,但最終的簡報檔案大小可能會大幅增加。

合併簡報時,字型會被保留嗎?

會。來源簡報使用的字型會在輸出檔案中保留,前提是該字型已安裝在系統上或已嵌入