Reimagine document experiences with PDF APIs designed for developers
From the company who created the PDF standard.
Adobe PDF Services API
Create, transform, OCR PDFs, and more.
PDF Services API is a collection of multiple services capable of quickly solving specific challenges and powering multi-step document workflows using SDKs for Node.js, Java, and .Net. With it, you gain access to basic PDF services, such as creating, securing, compressing, converting, combining, and splitting PDFs, as well as more advanced services, including Document Generation and PDF Extract. Do more with this API.
Adobe PDF Extract API
Unlock content structure in any PDF.
PDF Extract API leverages AI to parse PDFs programmatically and extract data and content for analysis and processing. Text, images, tables, font styling, and more are extracted with relative positioning and natural reading order and placed into a structured JSON file for downstream processing in NLP, RPA, content republishing or data analysis solutions. PDF Extract API works on both scanned and native PDFs and is included with PDF Services API.
Adobe Document Generation API
Generate documents from Word templates and JSON data.
Effortlessly create contracts, agreements, invoices, sales proposals, and more with Document Generation API. Using Microsoft Word templates and your own data, you can produce dynamic documents with conditional text, images, lists, and tables. Signature workflows are a cinch with the Adobe Acrobat Sign integration, and Document Generation is included with PDF Services API.
Adobe PDF Embed API
Display PDFs and enable collaboration with this free tool.
Leverage our free JavaScript API to embed PDFs and eliminate the need for end users to download additional plugins when opening PDFs in your applications. With PDF Embed API, you can provide a rich PDF viewing experience and enable digital collaboration and document analytics for helpful user insights. Implement this API in minutes with a few lines of code and samples for Angular and React.
Designed for developers
Use our cloud-based REST APIs and SDKs designed for developers to build new, innovative document solutions. Pick and choose from over 15 different PDF and document manipulation APIs to build custom end-to-end agreements, content publishing, data analysis workflow experiences, and more. Get started in minutes with our SDKs for Node.js, .Net, Java, and sample Postman collection.
Create PDF from URL
Create PDFs from a variety of formats, including static and dynamic HTML; Microsoft Word, PowerPoint, and Excel; as well as text, image, and, Zip
Copied to your clipboard1curl --location --request POST 'https://cpf-ue1.adobe.io/ops/:create?respondWith=%7B%22reltype%22%3A%20%22http%3A%2F%2Fns.adobe.com%2Frel%2Fprimary%22%7D' \2 --header 'Authorization: Bearer ' \3 --header 'Accept: application/json, text/plain, */*' \4 --header 'x-api-key: ' \5 --header 'Prefer: respond-async,wait=0' \6 --form 'contentAnalyzerRequests="{7 \"cpf:inputs\": {8 \"documentIn\": {9 \"cpf:location\": \"InputFile0\",10 \"dc:format\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"11 }12 },13 \"cpf:engine\": {14 \"repo:assetId\": \"urn:aaid:cpf:Service-1538ece812254acaac2a07799503a430\"15 },16 \"cpf:outputs\": {17 \"documentOut\": {18 \"cpf:location\": \"multipartLabelOut\",19 \"dc:format\": \"application/pdf\"20 }21 }22 }"' \23 --form 'InputFile0=@""'
Copied to your clipboard1// Create an ExecutionContext using credentials and create a new operation instance.2const executionContext = PDFServicesSdk.ExecutionContext.create(credentials),3 createPdfOperation = PDFServicesSdk.CreatePDF.Operation.createNew();45// Set operation input from a source file.6const input = PDFServicesSdk.FileRef.createFromLocalFile('resources/createPDFInput.docx');7createPdfOperation.setInput(input);89// Execute the operation and Save the result to the specified location.10createPdfOperation.execute(executionContext)11 .then(result => result.saveAsFile('output/createPDFFromDOCX.pdf'))12
Copied to your clipboard1//Create an ExecutionContext using credentials and create a new operation instance.2ExecutionContext executionContext = ExecutionContext.Create(credentials);3CreatePDFOperation createPdfOperation = CreatePDFOperation.CreateNew();45// Set operation input from a source file.6FileRef source = FileRef.CreateFromLocalFile(@"createPdfInput.docx");7createPdfOperation.SetInput(source);89// Execute the operation.10FileRef result = createPdfOperation.Execute(executionContext);1112// Save the result to the specified location.13result.SaveAs(Directory.GetCurrentDirectory() + "/output/createPdfOutput.pdf");
Copied to your clipboard1//Create an ExecutionContext using credentials and create a new operation instance.2ExecutionContext executionContext = ExecutionContext.create(credentials);3CreatePDFOperation createPdfOperation = CreatePDFOperation.createNew();45// Set operation input from a source file.6FileRef source = FileRef.createFromLocalFile("src/main/resources/createPDFInput.docx");7createPdfOperation.setInput(source);89// Execute the operation.10FileRef result = createPdfOperation.execute(executionContext);1112// Save the result to the specified location.13result.saveAs("output/createPDFFromDOCX.pdf");
Dynamic PDF Document Generation
Merge your JSON data with custom Word templates to generate high-fidelity PDF and Word documents
Copied to your clipboard1curl --location --request POST 'https://cpf-ue1.adobe.io/ops/:create?respondWith=%7B%22reltype%22%3A%20%22http%3A%2F%2Fns.adobe.com%2Frel%2Fprimary%22%7D' \2 --header 'Authorization: Bearer ' \3 --header 'Accept: application/json, text/plain, */*' \4 --header 'x-api-key: ' \5 --header 'Prefer: respond-async,wait=0' \6 --form 'contentAnalyzerRequests="{7 \"cpf:engine\":{8 \"repo:assetId\":\"urn:aaid:cpf:Service-52d5db6097ed436ebb96f13a4c7bf8fb\"9 },10 \"cpf:inputs\":{11 \"documentIn\":{12 \"cpf:location\":\"InputFile0\",13 \"dc:format\":\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"14 },15 \"params\":{16 \"cpf:inline\":{17 \"outputFormat\": \"pdf\",18 \"jsonDataForMerge\": {19 \"customerName\": \"Kane Miller\",20 \"customerVisits\": 100,21 \"itemsBought\": [22 {23 \"name\": \"Sprays\",24 \"quantity\": 50,25 \"amount\": 10026 },27 {28 \"name\": \"Chemicals\",29 \"quantity\": 100,30 \"amount\": 20031 }32 ],33 \"totalAmount\": 300,34 \"previousBalance\": 50,35 \"lastThreeBillings\": [100, 200, 300],36 \"photograph\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP88h8AAu0B9XNPCQQAAAAASUVORK5CYII=\"37 }38 }39 }40 },41 \"cpf:outputs\":{42 \"documentOut\":{43 \"cpf:location\":\"OutputFile\",44 \"dc:format\":\"application/pdf\"45 }46 }47 }"' \48 --form 'InputFile0=@""'
Copied to your clipboard1// Setup input data for the document merge process2const jsonString = fs.readFileSync('resources/salesOrder.json'),3 jsonDataForMerge = JSON.parse(jsonString);45// Create an ExecutionContext using credentials6const executionContext = PDFToolsSdk.ExecutionContext.create(credentials);78// Create a new DocumentMerge options instance9const documentMerge = PDFToolsSdk.DocumentMerge,10 documentMergeOptions = documentMerge.options,11 options = new documentMergeOptions.DocumentMergeOptions(jsonDataForMerge, documentMergeOptions.OutputFormat.PDF);1213// Create a new operation instance using the options instance14const documentMergeOperation = documentMerge.Operation.createNew(options)1516// Set operation input document template from a source file.17const input = PDFToolsSdk.FileRef.createFromLocalFile('resources/salesOrderTemplate.docx');18documentMergeOperation.setInput(input);1920// Execute the operation and Save the result to the specified location.21documentMergeOperation.execute(executionContext)22 .then(result => result.saveAsFile('output/salesOrderOutput.pdf'))
Copied to your clipboard1// Create an ExecutionContext using credentials.2ExecutionContext executionContext = ExecutionContext.Create(credentials);34// Setup input data for the document merge process5var content = File.ReadAllText(@"salesOrder.json");6JObject jsonDataForMerge = JObject.Parse(content);78// Create a new DocumentMerge Options instance9DocumentMergeOptions documentMergeOptions = new DocumentMergeOptions(jsonDataForMerge, OutputFormat.PDF);1011// Create a new DocumentMerge Operation instance with the DocumentMerge Options instance12DocumentMergeOperation documentMergeOperation = DocumentMergeOperation.CreateNew(documentMergeOptions);1314// Set the operation input document template from a source file.15documentMergeOperation.SetInput(FileRef.CreateFromLocalFile(@"salesOrderTemplate.docx"));1617// Execute the operation.18FileRef result = documentMergeOperation.Execute(executionContext);1920// Save the result to the specified location21result.SaveAs(Directory.GetCurrentDirectory() + "/output/salesOrderOutput.pdf");
Copied to your clipboard1// Setup input data for the document merge process2String content = new String(Files.readAllBytes(Paths.get("src/main/resources/salesOrder.json")));3JSONObject jsonDataForMerge = new JSONObject(content);45// Create an ExecutionContext using credentials.6ExecutionContext executionContext = ExecutionContext.create(credentials);78//Create a new DocumentMergeOptions instance9DocumentMergeOptions documentMergeOptions = new DocumentMergeOptions(jsonDataForMerge, OutputFormat.PDF);1011// Create a new DocumentMergeOperation instance with the DocumentMergeOptions instance12DocumentMergeOperation documentMergeOperation = DocumentMergeOperation.createNew(documentMergeOptions);1314// Set the operation input document template from a source file.15FileRef documentTemplate = FileRef.createFromLocalFile("src/main/resources/salesOrderTemplate.docx");16documentMergeOperation.setInput(documentTemplate);1718// Execute the operation19FileRef result = documentMergeOperation.execute(executionContext);2021// Save the result to the specified location.22result.saveAs("output/salesOrderOutput.pdf");
Extract PDF Content & Structure
Extract content from scanned and native PDFs to use for database insertion, content republishing, RPA, and more
Copied to your clipboard1curl --location --request POST 'https://cpf-ue1.adobe.io/ops/:create' \2--header 'Accept: application/json, text/plain, /' \3--header 'Authorization: Bearer ' \4--header 'x-api-key: ' \5--form 'contentAnalyzerRequests={6 \"cpf:engine\": {7 \"repo:assetId\": \"urn:aaid:cpf:58af6e2c-1f0c-400d-9188-078000185695\"8 },9 \"cpf:inputs\": {10 \"documentIn\": {11 \"cpf:location\": \"fileInput1\",12 \"dc:format\": \"application/pdf\"13 },14 \"params\": {15 \"cpf:inline\": {16 \"elementsToExtract\": [17 \"text\", \"tables\"18 ],19 \"renditionsToExtract\": [ \"tables\", \"figures\"]20 }21 }22 },23 \"cpf:outputs\": {24 \"elementsInfo\": {25 \"cpf:location\": \"jsonoutput\",26 \"dc:format\": \"application/json\"27 },28 \"elementsRenditions\": {29 \"cpf:location\": \"fileoutpart\",30 \"dc:format\": \"text/directory\"31 }32 }33}' \34--form 'fileInput1=@""'
Copied to your clipboard1// Create an ExecutionContext using credentials2const executionContext = PDFServicesSdk.ExecutionContext.create(credentials);34// Create a new operation instance.5const extractPDFOperation = PDFServicesSdk.ExtractPDF.Operation.createNew(),6 input = PDFServicesSdk.FileRef.createFromLocalFile(7 'resources/extractPDFInput.pdf',8 PDFServicesSdk.ExtractPDF.SupportedSourceFormat.pdf9 );1011// Set operation input from a source file.12extractPDFOperation.setInput(input);1314// Build and set extractPDF options15const options = new PDFServicesSdk.ExtractPDF.options.ExtractPdfOptions.Builder()16 .addElementsToExtract(17 PDFServicesSdk.ExtractPDF.options.ExtractElementType.TEXT)18 .addElementsToExtractRenditions(19 PDFServicesSdk.ExtractPDF.options.ExtractRenditionsElementType.FIGURES)20 .addCharInfo(true)21 .build()22extractPDFOperation.setOptions(options);2324// Execute the operation and Save the result to the specified location.25extractPDFOperation.execute(executionContext)26 .then(result => result.saveAsFile('output/extractPdf.zip'))
Copied to your clipboard1//Create an ExecutionContext using credentials and create a new operation instance.2ExecutionContext executionContext = ExecutionContext.Create(credentials);3ExtractPDFOperation extractPdfOperation = ExtractPDFOperation.CreateNew();45// Set operation input from a source file.6FileRef sourceFileRef = FileRef.CreateFromLocalFile(@"extractPDFInput.pdf");7extractPdfOperation.SetInputFile(sourceFileRef);89// Build ExtractPDF options and set them into the operation10ExtractPDFOptions extractPdfOptions = ExtractPDFOptions.ExtractPDFOptionsBuilder()11 .AddElementsToExtract(new List<ExtractElementType>(new []{ExtractElementType.TEXT, ExtractElementType.TABLES}))12 .AddElementsToExtractRenditions(new List<ExtractRenditionsElementType> (new []{ExtractRenditionsElementType.TABLES, ExtractRenditionsElementType.FIGURES}))13 .AddCharsInfo(true)14 .Build();15extractPdfOperation.SetOptions(extractPdfOptions);1617// Execute the operation.18FileRef result = extractPdfOperation.Execute(executionContext);1920// Save the result to the specified location.21result.SaveAs(Directory.GetCurrentDirectory() + "/output/extractPdf.zip");
Copied to your clipboard1// Create an ExecutionContext using credentials and create a new operation instance2ExecutionContext executionContext = ExecutionContext.create(credentials);3ExtractPDFOperation extractPDFOperation = ExtractPDFOperation.createNew();45// Set operation input from a source file6FileRef source = FileRef.createFromLocalFile("src/test/resources/extractPdfInput.pdf");7extractPDFOperation.setInputFile(source);89// Build ExtractPDF options and set them into the operation10ExtractPDFOptions extractPDFOptions = ExtractPDFOptions.extractPdfOptionsBuilder()11 .addElementsToExtract(Arrays.asList(PDFElementType.TEXT, PDFElementType.TABLES))12 .addElementsToExtractRenditions(Arrays.asList(PDFElementType.TABLES, PDFElementType.FIGURES))13 .addCharInfo(