Merge Presentations from Various Sources into a File in Storage Introduction
The article shows you how to merge PowerPoint presentations from different sources: local files, storage, and remote resources. The final presentation is saved in the storage. You can specify slide indices to merge. For protected presentations, passwords can be specified to open them. The request method below allows you to merge presentation files stored in different ways: locally, in storage, and remotely
API
Type
Description
Resource
/slides/merge
PUT
Merges presentations or some of their slides. Saves the result in the storage.
MergeAndSaveOnline
Request Parameters
Name
Type
Location
Required
Description
files
array
formData
false
The array of presentation files to merge.
outPath
string
query
true
The path to the presentation output file in a storage.
request
object
body
false
The information about presentations to merge (paths, passwords, slide indices, etc.).
storage
string
query
false
The name of the storage where the final presentation will be saved.
In case of Amazon S3 storage folder path starts with Amazon S3 bucket name.
Merging Presentations Saved to Local Files
Example: Merge TestData/example1.pptx and TestData/example2.pptx presentations saved to local files and save the result to MyFolder/MyPresentation.pptx file in MyStorage storage.
cURL Solution
SDK Solutions
C#
Copy
using Aspose.Slides.Cloud.Sdk ;
using FileInfo = Aspose . Slides . Cloud . Sdk . FileInfo ;
using System ;
using System.Collections.Generic ;
using System.IO ;
class Application
{
static void Main ( string [] args )
{
SlidesApi api = new SlidesApi ( "MyClientId" , "MyClientSecret" );
var fileInfo1 = new FileInfo { Content = File . OpenRead ( "TestData/example1.pptx" ) };
var fileInfo2 = new FileInfo { Content = File . OpenRead ( "TestData/example2.pptx" ) };
var files = new List < FileInfo > { fileInfo1 , fileInfo2 };
api . MergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files );
}
}
Java
Copy
import com.aspose.slides.ApiException ;
import com.aspose.slides.FileInfo ;
import com.aspose.slides.api.SlidesApi ;
import java.io.IOException ;
import java.nio.file.Files ;
import java.nio.file.Paths ;
import java.util.ArrayList ;
public class Application {
public static void main ( String [] args ) throws IOException , ApiException {
SlidesApi slidesApi = new SlidesApi ( "my_client_id" , "my_client_secret" );
FileInfo fileInfo1 = new FileInfo ();
fileInfo1 . setData ( Files . readAllBytes ( Paths . get ( "TestData/example1.pptx" )));
FileInfo fileInfo2 = new FileInfo ();
fileInfo2 . setData ( Files . readAllBytes ( Paths . get ( "TestData/example2.pptx" )));
List < FileInfo > files = new ArrayList < FileInfo >();
files . add ( fileInfo1 );
files . add ( fileInfo2 );
slidesApi . mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files , null , "MyStorage" );
}
}
PHP
Copy
use Aspose \Slides \Cloud \Sdk \Api \Configuration ;
use Aspose \Slides \Cloud \Sdk \Api \SlidesApi ;
$configuration = new Configuration ();
$configuration -> setAppSid ( "my_client_id" );
$configuration -> setAppKey ( "my_client_secret" );
$slidesApi = new SlidesApi ( null , $configuration );
$file1 = fopen ( "TestData/example1.pptx" , 'r' );
$file2 = fopen ( "TestData/example2.pptx" , 'r' );
$files = [ $file1 , $file2 ];
$slidesApi -> mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , $files , null , "MyStorage" );
Ruby
Copy
require "aspose_slides_cloud"
include AsposeSlidesCloud
configuration = Configuration . new
configuration . app_sid = "my_client_id"
configuration . app_key = "my_client_secret"
slides_api = SlidesApi . new ( configuration )
file1_data = File . binread ( "TestData/example1.pptx" )
file2_data = File . binread ( "TestData/example2.pptx" )
files = [ file1_data , file2_data ]
slides_api . merge_and_save_online ( "MyFolder/MyPresentation.pptx" , files , nil , "MyStorage" )
Python
Copy
import asposeslidescloud
from asposeslidescloud.apis.slides_api import SlidesApi
slides_api = SlidesApi ( None , "my_client_id" , "my_client_secret" )
with open ( "TestData/example1.pptx" , "rb" ) as file1_stream :
file1_data = file1_stream . read ()
with open ( "TestData/example2.pptx" , "rb" ) as file2_stream :
file2_data = file2_stream . read ()
files = [ file1_data , file2_data ]
slides_api . merge_and_save_online ( "MyFolder/MyPresentation.pptx" , files , None , "MyStorage" )
Node.js
Copy
const cloud = require ( "asposeslidescloud" );
const fs = require ( "fs" );
const slidesApi = new cloud . SlidesApi ( "my_client_id" , "my_client_secret" );
const fileStream1 = fs . createReadStream ( "TestData/example1.pptx" );
const fileStream2 = fs . createReadStream ( "TestData/example2.pptx" );
const files = [ fileStream1 , fileStream2 ];
slidesApi . mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files , null , "MyStorage" ). then (() => {
});
Android
Copy
import com.aspose.slides.ApiException ;
import com.aspose.slides.FileInfo ;
import com.aspose.slides.api.SlidesApi ;
import java.io.IOException ;
import java.nio.file.Files ;
import java.nio.file.Paths ;
import java.util.ArrayList ;
public class Application {
public static void main ( String [] args ) throws IOException , ApiException {
SlidesApi slidesApi = new SlidesApi ( "my_client_id" , "my_client_secret" );
FileInfo fileInfo1 = new FileInfo ();
fileInfo1 . setData ( Files . readAllBytes ( Paths . get ( "TestData/example1.pptx" )));
FileInfo fileInfo2 = new FileInfo ();
fileInfo2 . setData ( Files . readAllBytes ( Paths . get ( "TestData/example2.pptx" )));
List < FileInfo > files = new ArrayList < FileInfo >();
files . add ( fileInfo1 );
files . add ( fileInfo2 );
slidesApi . mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files , null , "MyStorage" );
}
}
C++
Copy
#include "asposeslidescloud/api/SlidesApi.h"
using namespace utility ;
using namespace utility :: conversions ;
using namespace asposeslidescloud :: api ;
int main ()
{
auto slidesApi = new SlidesApi ( to_string_t ( "my_client_id" ), to_string_t ( "my_client_secret" ));
auto fileStream1 = std :: make_shared < std :: ifstream > ( "TestData/example1.pptx" , std :: ios :: binary );
auto fileContent1 = std :: make_shared < HttpContent > ();
fileContent1 -> setData ( fileStream1 );
auto fileStream2 = std :: make_shared < std :: ifstream > ( "TestData/example2.pptx" , std :: ios :: binary );
auto fileContent2 = std :: make_shared < HttpContent > ();
fileContent2 -> setData ( fileStream2 );
auto files = { fileContent1 , fileContent2 };
slidesApi -> mergeAndSaveOnline ( to_string_t ( "MyFolder/MyPresentation.pptx" ), files , NULL , to_string_t ( "MyStorage" )). get ();
return 0 ;
}
Perl
Copy
use File::Slurp ;
use AsposeSlidesCloud::Configuration ;
use AsposeSlidesCloud::SlidesApi ;
my $config = AsposeSlidesCloud::Configuration -> new ();
$config -> { app_sid } = "my_client_id" ;
$config -> { app_key } = "my_client_secret" ;
my $slides_api = AsposeSlidesCloud::SlidesApi -> new ( config => $config );
my $file1_data = read_file ( "TestData/example1.pptx" , { binmode => ":raw" });
my $file2_data = read_file ( "TestData/example2.pptx" , { binmode => ":raw" });
my @files = ( $file1_data , $file2_data );
my %merge_params = ( "out_path" => "MyFolder/MyPresentation.pptx" , "files" => \ @files , "storage" => "MyStorage" );
my $result_data = $slides_api -> merge_and_save_online ( %merge_params );
Swift
Go
Merging Presentations Saved to Storage
Example: Merge local.pptx saved to local file, storage.pptx saved on storage, and remote presentation . Save the result to MyFolder/MyPrsentation.pptx file.
cURL Solution
SDK Solutions
C#
Copy
using Aspose.Slides.Cloud.Sdk ;
using FileInfo = Aspose . Slides . Cloud . Sdk . FileInfo ;
using Aspose.Slides.Cloud.Sdk.Model ;
using System ;
using System.Collections.Generic ;
class Application
{
static void Main ( string [] args )
{
SlidesApi api = new SlidesApi ( "MyClientId" , "MyClientSecret" );
var fileInfo = new FileInfo { Content = File . OpenRead ( "local.pptx" ), Name = "local.pptx" };
var files = new List < FileInfo > { fileInfo };
var presentation1 = new PresentationToMerge
{
Path = "local.pptx" ,
Slides = new List < int > { 1 , 2 }
};
var presentation2 = new PresentationToMerge
{
Path = "storage.pptx" ,
Password = "my_password" ,
Source = PresentationToMerge . SourceEnum . Storage
};
var presentation3 = new PresentationToMerge
{
Path = "https://drive.google.com/uc?export=download&id=remote.pptx" ,
Slides = new List < int > { 1 },
Source = PresentationToMerge . SourceEnum . Url
};
var request = new OrderedMergeRequest ();
request . Presentations = new List < PresentationToMerge > { presentation1 , presentation2 , presentation3 };
api . MergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files , request );
}
}
Java
Copy
import com.aspose.slides.ApiException ;
import com.aspose.slides.api.SlidesApi ;
import com.aspose.slides.model.* ;
import java.util.Arrays ;
public class Application {
public static void main ( String [] args ) throws ApiException {
SlidesApi slidesApi = new SlidesApi ( "my_client_key" , "my_client_secret" );
FileInfo fileInfo = new FileInfo ();
fileInfo . setData ( Files . readAllBytes ( Paths . get ( "local.pptx" )));
fileInfo . setName ( "local.pptx" );
List < FileInfo > files = new ArrayList < FileInfo >();
files . add ( fileInfo );
PresentationToMerge presentation1 = new PresentationToMerge ();
presentation1 . setPath ( "local.pptx" );
presentation1 . setSlides ( Arrays . asList ( 1 , 2 ));
PresentationToMerge presentation2 = new PresentationToMerge ();
presentation2 . setPath ( "storage.pptx" );
presentation2 . setPassword ( "my_password" );
presentation2 . setSource ( PresentationToMerge . SourceEnum . STORAGE );
PresentationToMerge presentation3 = new PresentationToMerge ();
presentation3 . setPath ( "https://drive.google.com/uc?export=download&id=remote.pptx" );
presentation3 . setSlides ( Arrays . asList ( 1 ));
presentation3 . setSource ( PresentationToMerge . SourceEnum . URL );
OrderedMergeRequest request = new OrderedMergeRequest ();
request . setPresentations ( Arrays . asList ( presentation1 , presentation2 , presentation3 ));
slidesApi . mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files , request , "MyStorage" );
}
}
PHP
Copy
use Aspose \Slides \Cloud \Sdk \Api \Configuration ;
use Aspose \Slides \Cloud \Sdk \Api \SlidesApi ;
use Aspose \Slides \Cloud \Sdk \Model \PresentationToMerge ;
use Aspose \Slides \Cloud \Sdk \Model \OrderedMergeRequest ;
$configuration = new Configuration ();
$configuration -> setAppSid ( "my_client_key" );
$configuration -> setAppKey ( "my_client_secret" );
$slidesApi = new SlidesApi ( null , $configuration );
$file = fopen ( "local.pptx" , 'r' );
$files = [ $file ];
$presentation1 = new PresentationToMerge ();
$presentation1 -> setPath ( "local.pptx" );
$presentation1 -> setSlides ([ 1 , 2 ]);
$presentation2 = new PresentationToMerge ();
$presentation2 -> setPath ( "storage.pptx" );
$presentation2 -> setPassword ( "my_password" );
$presentation2 -> setSource ( "Storage" );
$presentation3 = new PresentationToMerge ();
$presentation3 -> setPath ( "https://drive.google.com/uc?export=download&id=remote.pptx" );
$presentation3 -> setSlides ([ 1 ]);
$presentation3 -> setSource ( "Url" );
$request = new OrderedMergeRequest ();
$request -> setPresentations ([ $presentation1 , $presentation2 , $presentation3 ]);
$slidesApi -> mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , $files , $request , "MyStorage" );
Ruby
Copy
require "aspose_slides_cloud"
include AsposeSlidesCloud
configuration = Configuration . new
configuration . app_sid = "my_client_key"
configuration . app_key = "my_client_secret"
slides_api = SlidesApi . new ( configuration )
file_data = File . binread ( "local.pptx" )
files = [ file_data ]
presentation1 = PresentationToMerge . new
presentation1 . path = "file1"
presentation1 . slides = [ 1 , 2 ]
presentation2 = PresentationToMerge . new
presentation2 . path = "storage.pptx"
presentation2 . password = "my_password"
presentation2 . source = "Storage"
presentation3 = PresentationToMerge . new
presentation3 . path = "https://drive.google.com/uc?export=download&id=remote.pptx"
presentation1 . slides = [ 1 ]
presentation3 . source = "Url"
request = OrderedMergeRequest . new
request . presentations = [ presentation1 , presentation2 , presentation3 ]
slides_api . merge_and_save_online ( "MyFolder/MyPresentation.pptx" , files , request , "MyStorage" )
Python
Copy
import asposeslidescloud
from asposeslidescloud.apis.slides_api import SlidesApi
from asposeslidescloud.models.ordered_merge_request import OrderedMergeRequest
from asposeslidescloud.models.presentation_to_merge import PresentationToMerge
slides_api = SlidesApi ( None , "my_client_key" , "my_client_secret" )
with open ( "local.pptx" , "rb" ) as file1_stream :
file_data = file1_stream . read ()
files = [ file_data ]
presentation1 = PresentationToMerge ()
presentation1 . path = "local.pptx"
presentation1 . slides = [ 1 , 2 ]
presentation1 . source = "Storage"
presentation2 = PresentationToMerge ()
presentation2 . path = "storage.pptx"
presentation2 . password = "my_password"
presentation2 . source = "Storage"
presentation3 = PresentationToMerge ()
presentation3 . path = "https://drive.google.com/uc?export=download&id=remote.pptx"
presentation3 . slides = [ 1 ]
presentation3 . source = "Url"
request = OrderedMergeRequest ()
request . presentations = [ presentation1 , presentation2 , presentation3 ]
slides_api . merge_and_save_online ( "MyFolder/MyPresentation.pptx" , files , request , "MyStorage" )
Node.js
Copy
const cloud = require ( "asposeslidescloud" );
const fs = require ( "fs" );
const slidesApi = new cloud . SlidesApi ( "my_client_key" , "my_client_secret" );
const fileStream = fs . createReadStream ( "local.pptx" );
const files = [ fileStream ];
const presentation1 = new cloud . PresentationToMerge ();
presentation1 . path = "local.pptx" ;
presentation1 . slides = [ 1 , 2 ];
const presentation2 = new cloud . PresentationToMerge ();
presentation2 . path = "storage.pptx" ;
presentation2 . password = "my_password" ;
presentation2 . source = "Storage" ;
const presentation3 = new cloud . PresentationToMerge ();
presentation3 . path = "https://drive.google.com/uc?export=download&id=remote.pptx" ;
presentation3 . source = "Url" ;
const request = new cloud . OrderedMergeRequest ();
request . presentations = [ presentation1 , presentation2 , presentation3 ];
slidesApi . mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files , request , "MyStorage" ). then (() => {
});
Android
Copy
import com.aspose.slides.ApiException ;
import com.aspose.slides.api.SlidesApi ;
import com.aspose.slides.model.* ;
import java.util.Arrays ;
public class Application {
public static void main ( String [] args ) throws ApiException {
SlidesApi slidesApi = new SlidesApi ( "my_client_key" , "my_client_secret" );
FileInfo fileInfo = new FileInfo ();
fileInfo . setData ( Files . readAllBytes ( Paths . get ( "local.pptx" )));
fileInfo . setName ( "local.pptx" );
List < FileInfo > files = new ArrayList < FileInfo >();
files . add ( fileInfo );
PresentationToMerge presentation1 = new PresentationToMerge ();
presentation1 . setPath ( "local.pptx" );
presentation1 . setSlides ( Arrays . asList ( 1 , 2 ));
PresentationToMerge presentation2 = new PresentationToMerge ();
presentation2 . setPath ( "storage.pptx" );
presentation2 . setPassword ( "my_password" );
presentation2 . setSource ( PresentationToMerge . SourceEnum . STORAGE );
PresentationToMerge presentation3 = new PresentationToMerge ();
presentation3 . setPath ( "https://drive.google.com/uc?export=download&id=remote.pptx" );
presentation3 . setSlides ( Arrays . asList ( 1 ));
presentation3 . setSource ( PresentationToMerge . SourceEnum . URL );
OrderedMergeRequest request = new OrderedMergeRequest ();
request . setPresentations ( Arrays . asList ( presentation1 , presentation2 , presentation3 ));
slidesApi . mergeAndSaveOnline ( "MyFolder/MyPresentation.pptx" , files , request , "MyStorage" );
}
}
C++
Copy
#include "asposeslidescloud/api/SlidesApi.h"
using namespace utility ;
using namespace utility :: conversions ;
using namespace asposeslidescloud :: api ;
int main ()
{
auto slidesApi = new SlidesApi ( to_string_t ( "my_client_key" ), to_string_t ( "my_client_secret" ));
auto fileStream = std :: make_shared < std :: ifstream > ( "TestData/example1.pptx" , std :: ios :: binary );
auto fileContent = std :: make_shared < HttpContent > ();
fileContent -> setData ( fileStream );
auto files = { fileContent };
auto presentation1 = std :: make_shared < PresentationToMerge > ();
presentation1 -> setPath ( to_string_t ( "lodal.pptx" ));
presentation1 -> setSlides ({ 1 , 2 });
auto presentation2 = std :: make_shared < PresentationToMerge > ();
presentation2 -> setPath ( to_string_t ( "storage.pptx" ));
presentation2 -> setPassword ( to_string_t ( "my_password" ));
presentation2 -> setSource ( to_string_t ( "Storage" ));
auto presentation3 = std :: make_shared < PresentationToMerge > ();
presentation3 -> setPath ( to_string_t ( "
https : //drive.google.com/uc?export=download&id=remote.pptx" ));
presentation3 -> setSlides ({ 1 });
presentation3 -> setSource ( to_string_t ( "Url" ));
auto request = std :: make_shared < OrderedMergeRequest > ();
request -> setPresentations ({ presentation1 , presentation2 , presentation3 });
slidesApi -> mergeAndSaveOnline ( to_string_t ( "MyFolder/MyPresentation.pptx" ), files , request , to_string_t ( "MyStorage" )). get ();
return 0 ;
}
Perl
Copy
use AsposeSlidesCloud::Configuration ;
use AsposeSlidesCloud::SlidesApi ;
use AsposeSlidesCloud::Object::PresentationToMerge ;
use AsposeSlidesCloud::Object::OrderedMergeRequest ;
my $config = AsposeSlidesCloud::Configuration -> new ();
$config -> { app_sid } = "my_client_key" ;
$config -> { app_key } = "my_client_secret" ;
my $slides_api = AsposeSlidesCloud::SlidesApi -> new ( config => $config );
my $file_data = read_file ( "TestData/example1.pptx" , { binmode => ":raw" });
my @files = [ $file_data ];
my $presentation1 = AsposeSlidesCloud::Object::PresentationToMerge -> new ();
$presentation1 -> { path } = "file1" ;
@ { $presentation1 -> { slides }} = ( 1 , 2 );
my $presentation2 = AsposeSlidesCloud::Object::PresentationToMerge -> new ();
$presentation2 -> { path } = "storage.pptx" ;
$presentation2 -> { password } = "my_password" ;
$presentation2 -> { source } = "Storage" ;
my $presentation3 = AsposeSlidesCloud::Object::PresentationToMerge -> new ();
$presentation3 -> { path } = "https://drive.google.com/uc?export=download&id=remote.pptx" ;
@ { $presentation3 -> { slides }} = ( 1 );
$presentation3 -> { source } = "Url" ;
my $request = AsposeSlidesCloud::Object::OrderedMergeRequest -> new ();
@ { $request -> { presentations }} = ( $presentation1 , $presentation2 , $presentation3 );
my %mergeParams = ( "out_path" => "MyFolder/MyPresentation.pptx" , "files" => @files , "request" => $request , "storage" => "MyStorage" );
$slides_api -> merge_and_save_online ( %mergeParams );
Swift
Go
SDKs
Using an SDK (API client) is the quickest way for a developer to speed up development. An SDK takes care of a lot of low-level details of making requests and handling responses and lets you focus on writing code specific to your particular project. Check out our GitHub repository for a complete list of Aspose.Slides Cloud SDKs along with working examples, to get you started in no time. Please check Available SDKs article to learn how to add an SDK to your project.