Combine multiple documents into a pdf file
Combine two or more documents into a single PDF file
See our public API Reference and quickly try our APIs using the Postman collections.
REST API
Node js
.Net
Java
Python
Copied to your clipboard// Please refer our Rest API docs for more information// https://developer.adobe.com/document-services/docs/apis/#tag/Combine-PDFcurl --location --request POST 'https://pdf-services.adobe.io/operation/combinepdf' \--header 'x-api-key: {{Placeholder for client_id}}' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer {{Placeholder for token}}' \--data-raw '{"assets": [{"assetID": "urn:aaid:AS:UE1:23c30ee0-2c4d-46d6-87f2-087832fca718"},{"assetID": "urn:aaid:AS:UE1:23c30ee0-2e4d-46d6-87f2-087832fca718"}]}'// Legacy API can be found here// https://documentcloud.adobe.com/document-services/index.html#post-combinePDF
Copied to your clipboard// Get the samples from http://www.adobe.com/go/pdftoolsapi_node_sample// Run the sample:// node src/combinepdf/combine-pdf.jsconst {ServicePrincipalCredentials,PDFServices,MimeType,CombinePDFJob,CombinePDFParams,CombinePDFResult,SDKError,ServiceUsageError,ServiceApiError} = require("@adobe/pdfservices-node-sdk");const fs = require("fs");(async () => {let readStream1;let readStream2;try {// Initial setup, create credentials instanceconst credentials = new ServicePrincipalCredentials({clientId: process.env.PDF_SERVICES_CLIENT_ID,clientSecret: process.env.PDF_SERVICES_CLIENT_SECRET});// Creates a PDF Services instanceconst pdfServices = new PDFServices({credentials});// Creates an asset(s) from source file(s) and uploadreadStream1 = fs.createReadStream("./combineFilesInput1.pdf");readStream2 = fs.createReadStream("./combineFilesInput2.pdf");const [inputAsset1, inputAsset2] = await pdfServices.uploadAssets({streamAssets: [{readStream: readStream1,mimeType: MimeType.PDF}, {readStream: readStream2,mimeType: MimeType.PDF}]});// Create parameters for the jobconst params = new CombinePDFParams().addAsset(inputAsset1).addAsset(inputAsset2);// Create a new job instanceconst job = new CombinePDFJob({params});// Submit the job and get the job resultconst pollingURL = await pdfServices.submit({job});const pdfServicesResponse = await pdfServices.getJobResult({pollingURL,resultType: CombinePDFResult});// Get content from the resulting asset(s)const resultAsset = pdfServicesResponse.result.asset;const streamAsset = await pdfServices.getContent({asset: resultAsset});// Creates an output stream and copy result asset's content to itconst outputFilePath = "./combineFilesOutput.pdf";console.log(`Saving asset at ${outputFilePath}`);const outputStream = fs.createWriteStream(outputFilePath);streamAsset.readStream.pipe(outputStream);} catch (err) {if (err instanceof SDKError || err instanceof ServiceUsageError || err instanceof ServiceApiError) {console.log("Exception encountered while executing operation", err);} else {console.log("Exception encountered while executing operation", err);}} finally {readStream1?.destroy();readStream2?.destroy();}})();
Copied to your clipboard// Get the samples from https://www.adobe.com/go/pdftoolsapi_net_samples// Run the sample:// cd CombinePDF/// dotnet run CombinePDF.csprojnamespace CombinePDF{class Program{private static readonly ILog log = LogManager.GetLogger(typeof(Program));static void Main(){//Configure the loggingConfigureLogging();try{// Initial setup, create credentials instanceICredentials credentials = new ServicePrincipalCredentials(Environment.GetEnvironmentVariable("PDF_SERVICES_CLIENT_ID"),Environment.GetEnvironmentVariable("PDF_SERVICES_CLIENT_SECRET"));// Creates a PDF Services instancePDFServices pdfServices = new PDFServices(credentials);// Creates an asset(s) from source file(s) and uploadusing Stream inputStream1 = File.OpenRead(@"combineFilesInput1.pdf");using Stream inputStream2 = File.OpenRead(@"combineFilesInput2.pdf");List<IAsset> assets = pdfServices.UploadAssets(new List<StreamAsset>(){new StreamAsset(inputStream1, PDFServicesMediaType.PDF.GetMIMETypeValue()),new StreamAsset(inputStream2, PDFServicesMediaType.PDF.GetMIMETypeValue())});// Create parameters for the jobCombinePDFParams combinePDFParams = CombinePDFParams.CombinePDFParamsBuilder().AddAsset(assets[0]).AddAsset(assets[1]).Build();// Creates a new job instanceCombinePDFJob combinePDFJob = new CombinePDFJob(combinePDFParams);// Submits the job and gets the job resultString location = pdfServices.Submit(combinePDFJob);PDFServicesResponse<CombinePDFResult> pdfServicesResponse =pdfServices.GetJobResult<CombinePDFResult>(location, typeof(CombinePDFResult));// Get content from the resulting asset(s)IAsset resultAsset = pdfServicesResponse.Result.Asset;StreamAsset streamAsset = pdfServices.GetContent(resultAsset);// Creating output streams and copying stream asset's content to itString outputFilePath = "/output/combineFilesOutput.pdf";new FileInfo(Directory.GetCurrentDirectory() + outputFilePath).Directory.Create();Stream outputStream = File.OpenWrite(Directory.GetCurrentDirectory() + outputFilePath);streamAsset.Stream.CopyTo(outputStream);outputStream.Close();}catch (ServiceUsageException ex){log.Error("Exception encountered while executing operation", ex);}catch (ServiceApiException ex){log.Error("Exception encountered while executing operation", ex);}catch (SDKException ex){log.Error("Exception encountered while executing operation", ex);}catch (IOException ex){log.Error("Exception encountered while executing operation", ex);}catch (Exception ex){log.Error("Exception encountered while executing operation", ex);}}static void ConfigureLogging(){ILoggerRepository logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));}}}
Copied to your clipboard// Get the samples from https://www.adobe.com/go/pdftoolsapi_java_samples// Run the sample:// mvn -f pom.xml exec:java -Dexec.mainClass=com.adobe.pdfservices.operation.samples.combinepdf.CombinePDFpublic class CombinePDF {// Initialize the logger.private static final Logger LOGGER = LoggerFactory.getLogger(CombinePDF.class);public static void main(String[] args) {try (InputStream inputStream1 = Files.newInputStream(new File("src/main/resources/combineFilesInput1.pdf").toPath());InputStream inputStream2 = Files.newInputStream(new File("src/main/resources/combineFilesInput2.pdf").toPath())) {// Initial setup, create credentials instanceCredentials credentials = new ServicePrincipalCredentials(System.getenv("PDF_SERVICES_CLIENT_ID"),System.getenv("PDF_SERVICES_CLIENT_SECRET"));// Creates a PDF Services instancePDFServices pdfServices = new PDFServices(credentials);// Creates an asset(s) from source file(s) and uploadList<StreamAsset> streamAssets = new ArrayList<>();streamAssets.add(new StreamAsset(inputStream1, PDFServicesMediaType.PDF.getMediaType()));streamAssets.add(new StreamAsset(inputStream2, PDFServicesMediaType.PDF.getMediaType()));List<Asset> assets = pdfServices.uploadAssets(streamAssets);// Create parameters for the jobCombinePDFParams combinePDFParams = CombinePDFParams.combinePDFParamsBuilder().addAsset(assets.get(0)).addAsset(assets.get(1)).build();// Creates a new job instanceCombinePDFJob combinePDFJob = new CombinePDFJob(combinePDFParams);// Submit the job and gets the job resultString location = pdfServices.submit(combinePDFJob);PDFServicesResponse<CombinePDFResult> pdfServicesResponse = pdfServices.getJobResult(location, CombinePDFResult.class);// Get content from the resulting asset(s)Asset resultAsset = pdfServicesResponse.getResult().getAsset();StreamAsset streamAsset = pdfServices.getContent(resultAsset);// Creates an output stream and copy stream asset's content to itFiles.createDirectories(Paths.get("output/"));OutputStream outputStream = Files.newOutputStream(new File("output/combineFilesOutput.pdf").toPath());LOGGER.info("Saving asset at output/combineFilesOutput.pdf");IOUtils.copy(streamAsset.getInputStream(), outputStream);outputStream.close();} catch (IOException | ServiceApiException | SDKException | ServiceUsageException e) {LOGGER.error("Exception encountered while executing operation", e);}}}
Copied to your clipboard# Get the samples https://github.com/adobe/pdfservices-python-sdk-samples# Run the sample:# python src/combinepdf/combine_pdf.py# Initialize the loggerlogging.basicConfig(level=logging.INFO)class CombinePDF:def __init__(self):try:file = open("./combineFilesInput1.pdf", "rb")input_stream_1 = file.read()file.close()file = open("./combineFilesInput2.pdf", "rb")input_stream_2 = file.read()file.close()# Initial setup, create credentials instancecredentials = ServicePrincipalCredentials(client_id=os.getenv("PDF_SERVICES_CLIENT_ID"),client_secret=os.getenv("PDF_SERVICES_CLIENT_SECRET"),)# Creates a PDF Services instancepdf_services = PDFServices(credentials=credentials)# Creates an asset(s) from source file(s) and uploadstream_assets = [StreamAsset(input_stream_1, PDFServicesMediaType.PDF),StreamAsset(input_stream_2, PDFServicesMediaType.PDF),]assets = pdf_services.upload_assets(stream_assets)# Create parameters for the jobcombine_pdf_params = (CombinePDFParams().add_asset(assets[0])).add_asset(assets[1])# Creates a new job instancecombine_pdf_job = CombinePDFJob(combine_pdf_params=combine_pdf_params)# Submit the job and gets the job resultlocation = pdf_services.submit(combine_pdf_job)pdf_services_response = pdf_services.get_job_result(location, CombinePDFResult)# Get content from the resulting asset(s)result_asset: CombinePDFResult = (pdf_services_response.get_result().get_asset())stream_asset: StreamAsset = pdf_services.get_content(result_asset)# Creates an output stream and copy stream asset's content to itoutput_file_path = "output/CombinePDF.pdf"with open(output_file_path, "wb") as file:file.write(stream_asset.get_input_stream())except (ServiceApiException, ServiceUsageException, SdkException) as e:logging.exception(f"Exception encountered while executing operation: {e}")if __name__ == "__main__":CombinePDF()

