25/03/2025
Adobe Acrobat SDK: Muliggør avanceret PDF-integration
I den stadigt udviklende digitale verden er PDF-formatet uundværligt for dokumentudveksling og -lagring. Adobe Acrobat, som pioneren inden for PDF-teknologi, tilbyder et kraftfuldt værktøjssæt til udviklere, der ønsker at integrere avanceret PDF-funktionalitet i deres egne applikationer. Dette værktøjssæt, kendt som Adobe Acrobat SDK, giver udviklere mulighed for at bygge bro mellem deres software og de omfattende funktioner i Acrobat, hvilket åbner op for en verden af muligheder for automatisering, tilpasning og effektivisering af PDF-relaterede opgaver.

Uanset om du arbejder med at skabe interaktive formularer, implementere digitale signaturer, manipulere PDF-indhold eller blot ønske at forbedre brugeroplevelsen med PDF-filer, tilbyder Acrobat SDK de nødvendige ressourcer. Denne artikel dykker ned i, hvad Acrobat SDK indebærer, hvilke fordele det giver, og hvordan du kan komme i gang med at udnytte dets potentiale i forskellige programmeringssprog.
Hvad er Adobe Acrobat SDK?
Adobe Acrobat SDK er en samling af værktøjer, biblioteker, header-filer, eksempler og dokumentation, der er designet til at give tredjepartsudviklere mulighed for at skabe software, der interagerer med Adobe Acrobat-teknologi. SDK'en giver adgang til et bredt spektrum af Acrobat's funktionaliteter, hvilket gør det muligt at udvikle applikationer, der kan:
- Oprette og redigere PDF-filer: Generer PDF-dokumenter fra bunden eller modificer eksisterende filer, herunder tekst, billeder og layout.
- Implementere digitale signaturer: Integrer funktionalitet til digitale signaturer, herunder elektroniske segl, for at sikre dokumentintegritet og autenticitet.
- Automatisere PDF-processer: Automatiser opgaver som konvertering, fletning, opdeling og udtrækning af data fra PDF-filer.
- Udvikle plugins til Acrobat: Skab brugerdefinerede udvidelser, der tilføjer ny funktionalitet direkte til Adobe Acrobat-applikationen.
- Bruge JavaScript i PDF'er: Implementer komplekse logikker og brugerinteraktioner inden i PDF-dokumenter ved hjælp af Acrobat's indbyggede JavaScript-motor.
- Kommunikere på tværs af applikationer: Brug Interapplication Communication (IAC) til at styre Acrobat fra andre applikationer.
Udvikling med Acrobat SDK: Vigtige Overvejelser
SDK'en understøtter flere udviklingsmetoder, der giver fleksibilitet og tilpasningsevne til forskellige projekttyper. Nogle af de mest fremtrædende metoder inkluderer:
JavaScript API
Acrobat's JavaScript API giver udviklere mulighed for at tilføje dynamisk funktionalitet til PDF-dokumenter. Dette kan omfatte formularvalidering, beregninger, betinget visning af felter og automatisering af opgaver inden for selve PDF-filen. JavaScript API'en er især nyttig til at skabe interaktive formularer og forbedre brugeroplevelsen for slutbrugeren.
Plugins (Acrobat SDK)
For udviklere, der ønsker at udvide selve Adobe Acrobat-applikationen, tilbyder SDK'en mulighed for at udvikle plugins. Disse plugins kan tilføje nye menupunkter, værktøjer og funktionaliteter, der integreres sømløst med Acrobat's brugergrænseflade. Dette giver en dybere integration og mulighed for at skræddersy Acrobat til specifikke arbejdsgange.
Interapplication Communication (IAC)
IAC giver mulighed for at styre Acrobat-processer fra andre applikationer. Dette kan være nyttigt i scenarier, hvor du har brug for at automatisere oprettelsen eller manipulationen af PDF-filer fra et andet program, f.eks. et CRM-system eller en webapplikation. IAC kan implementeres via forskellige teknologier, afhængigt af operativsystemet og udviklingsmiljøet.
REST API'er (Adobe PDF Services)
Udover den traditionelle Acrobat SDK har Adobe også udviklet en suite af REST API'er, der giver adgang til PDF-funktioner via skyen. Disse API'er, ofte refereret til som Adobe PDF Services, er ideelle til server-side integration og webapplikationer. De understøtter en bred vifte af sprog som Node.js, .NET, Java og Python og tilbyder kraftfulde funktioner som f.eks. elektroniske segl.
Elektroniske Segl med Adobe PDF Services API
Et centralt aspekt af moderne dokumenthåndtering er sikkerhed og autenticitet, hvilket digitale signaturer og elektroniske segl adresserer. Adobe PDF Services API'er tilbyder en robust løsning til at anvende elektroniske segl på PDF-dokumenter ved hjælp af et Certificate Signing Certificate (CSC). Dette involverer en proces, hvor et digitalt certifikat fra en betroet udbyder anvendes til at signere dokumentet kryptografisk.
Processen for at anvende et elektronisk segl involverer typisk følgende trin:
- Oprette en Service Principal Credentials: Du skal oprette en service-principal med dine Adobe PDF Services-kontooplysninger (client ID og client secret).
- Upload af Dokument og Segl-billede: Kildedokumentet (f.eks. en PDF) og et billede af seglet (f.eks. et PNG-format) uploades til Adobe PDF Services.
- Konfigurere Segl-indstillinger: Dette inkluderer at specificere, hvor seglet skal placeres i dokumentet (feltplacering, sidenummer), samt hvordan det skal se ud (synligt/usynligt, hvilke informationer der skal vises).
- Angive Certifikatdetaljer: Oplysninger om din udbyder af digitale certifikater, credential ID, adgangstoken og PIN-kode skal leveres for at autentificere med udbyderen af det digitale certifikat.
- Anvende Seglet: PDF Services API'en anvender derefter det digitale segl på PDF-dokumentet baseret på de angivne indstillinger.
- Downloade det Signerede Dokument: Det resulterende dokument med det anvendte elektroniske segl kan downloades.
Nedenfor ses eksempler på, hvordan denne proces kan implementeres i forskellige programmeringssprog:
Eksempel: Node.js
I Node.js kan du bruge `@adobe/pdfservices-node-sdk` pakken til at interagere med Adobe PDF Services. Koden involverer oprettelse af credentials, upload af filer, konfiguration af segl-indstillinger og submission af jobbet.
const { ServicePrincipalCredentials, PDFServices, MimeType, DocumentLevelPermission, FieldLocation, FieldOptions, CSCAuthContext, CSCCredential, PDFElectronicSealParams, PDFElectronicSealJob, PDFElectronicSealResult } = require('@adobe/pdfservices-node-sdk'); const fs = require('fs'); (async () => { try { const credentials = new ServicePrincipalCredentials({ clientId: process.env.PDF_SERVICES_CLIENT_ID, clientSecret: process.env.PDF_SERVICES_CLIENT_SECRET }); const pdfServices = new PDFServices({ credentials }); const sourceFileReadStream = fs.createReadStream('./sampleInvoice.pdf'); const sealImageReadStream = fs.createReadStream('./sampleSealImage.png'); const [sourceFileAsset, sealImageAsset] = await pdfServices.uploadAssets({ streamAssets: [ { readStream: sourceFileReadStream, mimeType: MimeType.PDF }, { readStream: sealImageReadStream, mimeType: MimeType.PNG } ] }); const documentLevelPermission = DocumentLevelPermission.FORM_FILLING; const sealFieldName = "Signature1"; const sealPageNumber = 1; const sealVisible = true; const fieldLocation = new FieldLocation({ left: 150, top: 250, right: 350, bottom: 200 }); const sealFieldOptions = new FieldOptions({ visible: sealVisible, location: fieldLocation, fieldName: sealFieldName, pageNumber: sealPageNumber }); const providerName = ""; const accessToken = ""; const credentialId = ""; const pin = ""; const authorizationContext = new CSCAuthContext({ accessToken, tokenType: "Bearer" }); const certificateCredentials = new CSCCredential({ providerName, credentialId, pin, authorizationContext }); const params = new PDFElectronicSealParams({ certificateCredentials, sealFieldOptions, documentLevelPermission }); const job = new PDFElectronicSealJob({ inputAsset: sourceFileAsset, sealImageAsset, params }); const pollingURL = await pdfServices.submit({ job }); const pdfServicesResponse = await pdfServices.getJobResult({ pollingURL, resultType: PDFElectronicSealResult }); const resultAsset = pdfServicesResponse.result.asset; const streamAsset = await pdfServices.getContent({ asset: resultAsset }); const outputFilePath = "./sealedOutput.pdf"; console.log(`Saving asset at ${outputFilePath}`); const writeStream = fs.createWriteStream(outputFilePath); streamAsset.readStream.pipe(writeStream); } catch (err) { console.error("Error executing operation:", err); } })(); Eksempel: C# (.NET)
For .NET-udviklere kan Adobe PDF Services SDK bruges med C#. Koden ligner Node.js-eksemplet, men bruger .NET-specifikke klasser og metoder.

using Adobe.PDFServices.Client.Core; using Adobe.PDFServices.Client.Core.Credentials; using Adobe.PDFServices.Client.Core.Exceptions; using Adobe.PDFServices.Client.Core.IO; using Adobe.PDFServices.Client.Core.PDFElectronicSeal; using Adobe.PDFServices.Client.Core.PDFElectronicSeal.Data; using Adobe.PDFServices.Client.Core.PDFElectronicSeal.Enum; using Adobe.PDFServices.Client.Core.PDFServices; using Adobe.PDFServices.Client.Core.PDFServices.Enum; using System; using System.IO; namespace ElectronicSeal { class Program { static void Main(string[] args) { try { ICredentials credentials = new ServicePrincipalCredentials(Environment.GetEnvironmentVariable("PDF_SERVICES_CLIENT_ID"), Environment.GetEnvironmentVariable("PDF_SERVICES_CLIENT_SECRET")); PDFServices pdfServices = new PDFServices(credentials); using Stream inputStream = File.OpenRead(@"SampleInvoice.pdf"); using Stream inputStreamSealImage = File.OpenRead(@"sampleSealImage.png"); IAsset asset = pdfServices.Upload(inputStream, PDFServicesMediaType.PDF.GetMIMETypeValue()); IAsset sealImageAsset = pdfServices.Upload(inputStreamSealImage, PDFServicesMediaType.PNG.GetMIMETypeValue()); DocumentLevelPermission documentLevelPermission = DocumentLevelPermission.FORM_FILLING; String sealFieldName = "Signature1"; int sealPageNumber = 1; bool sealVisible = true; FieldLocation fieldLocation = new FieldLocation(150, 250, 350, 200); FieldOptions fieldOptions = new FieldOptions.Builder(sealFieldName).SetVisible(sealVisible).SetFieldLocation(fieldLocation).SetPageNumber(sealPageNumber).Build(); String providerName = ""; String accessToken = ""; String credentialID = ""; String pin = ""; CSCAuthContext cscAuthContext = new CSCAuthContext(accessToken, "Bearer"); CertificateCredentials certificateCredentials = CertificateCredentials.CSCCredentialBuilder().WithProviderName(providerName).WithCredentialID(credentialID).WithPin(pin).WithCSCAuthContext(cscAuthContext).Build(); PDFElectronicSealParams pdfElectronicSealParams = PDFElectronicSealParams.PDFElectronicSealParamsBuilder(certificateCredentials, fieldOptions).WithDocumentLevelPermission(documentLevelPermission).Build(); PDFElectronicSealJob pdfElectronicSealJob = new PDFElectronicSealJob(asset, pdfElectronicSealParams); pdfElectronicSealJob.SetSealImageAsset(sealImageAsset); String location = pdfServices.Submit(pdfElectronicSealJob); PDFServicesResponse pdfServicesResponse = pdfServices.GetJobResult(location, typeof(PDFElectronicSealResult)); IAsset resultAsset = pdfServicesResponse.Result.Asset; StreamAsset streamAsset = pdfServices.GetContent(resultAsset); String outputFilePath = "/output/sealedOutput.pdf"; new FileInfo(Directory.GetCurrentDirectory() + outputFilePath).Directory.Create(); Stream outputStream = File.OpenWrite(Directory.GetCurrentDirectory() + outputFilePath); streamAsset.Stream.CopyTo(outputStream); outputStream.Close(); } catch (ServiceUsageException ex) { Console.Error.WriteLine("Error:", ex); } catch (ServiceApiException ex) { Console.Error.WriteLine("Error:", ex); } catch (SDKException ex) { Console.Error.WriteLine("Error:", ex); } catch (IOException ex) { Console.Error.WriteLine("Error:", ex); } catch (Exception ex) { Console.Error.WriteLine("Error:", ex); } } } } Eksempel: Java
I Java bruges Adobe PDF Services SDK'en ligeledes, hvor koden struktureres omkring Java-klasser og -metoder.
import com.adobe.pdfservices.operation.samples.electronicseal.ElectronicSeal; import com.adobe.pdfservices.operation.pdfjobs.params.electronicseal.PDFElectronicSealParams; import com.adobe.pdfservices.operation.pdfjobs.params.electronicseal.PDFElectronicSealJob; import com.adobe.pdfservices.operation.pdfjobs.result.PDFElectronicSealResult; import com.adobe.pdfservices.operation.PDFServices; import com.adobe.pdfservices.operation.io.Asset; import com.adobe.pdfservices.operation.io.StreamAsset; import com.adobe.pdfservices.operation.pdfjobs.params.common.DocumentLevelPermission; import com.adobe.pdfservices.operation.pdfjobs.params.common.FieldLocation; import com.adobe.pdfservices.operation.pdfjobs.params.common.FieldOptions; import com.adobe.pdfservices.operation.pdfjobs.params.common.credentials.CertificateCredentials; import com.adobe.pdfservices.operation.pdfjobs.params.common.credentials.CSCAuthContext; import com.adobe.pdfservices.operation.pdfjobs.params.common.credentials.ServicePrincipalCredentials; import com.adobe.pdfservices.operation.pdfjobs.params.common.enums.PDFServicesMediaType; import com.adobe.pdfservices.operation.exception.SDKException; import com.adobe.pdfservices.operation.exception.ServiceApiException; import com.adobe.pdfservices.operation.exception.ServiceUsageException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.io.IOUtils; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Paths; public class ElectronicSeal { private static final Logger LOGGER = LoggerFactory.getLogger(ElectronicSeal.class); public static void main(String[] args) { try (InputStream inputStream = Files.newInputStream(new File("src/main/resources/sampleInvoice.pdf").toPath()); InputStream inputStreamSealImage = Files.newInputStream(new File("src/main/resources/sampleSealImage.png").toPath())) { Credentials credentials = new ServicePrincipalCredentials(System.getenv("PDF_SERVICES_CLIENT_ID"), System.getenv("PDF_SERVICES_CLIENT_SECRET")); PDFServices pdfServices = new PDFServices(credentials); Asset asset = pdfServices.upload(inputStream, PDFServicesMediaType.PDF.getMediaType()); Asset sealImageAsset = pdfServices.upload(inputStreamSealImage, PDFServicesMediaType.PNG.getMediaType()); DocumentLevelPermission documentLevelPermission = DocumentLevelPermission.FORM_FILLING; String sealFieldName = "Signature1"; Integer sealPageNumber = 1; Boolean sealVisible = true; FieldLocation fieldLocation = new FieldLocation(150, 250, 350, 200); FieldOptions fieldOptions = new FieldOptions.Builder(sealFieldName) .setFieldLocation(fieldLocation) .setPageNumber(sealPageNumber) .setVisible(sealVisible) .build(); String providerName = ""; String accessToken = ""; String credentialID = ""; String pin = ""; CSCAuthContext cscAuthContext = new CSCAuthContext(accessToken, "Bearer"); CertificateCredentials certificateCredentials = CertificateCredentials.cscCredentialBuilder() .withProviderName(providerName) .withCredentialID(credentialID) .withPin(pin) .withCSCAuthContext(cscAuthContext) .build(); PDFElectronicSealParams pdfElectronicSealParams = PDFElectronicSealParams.pdfElectronicSealParamsBuilder(certificateCredentials, fieldOptions) .withDocumentLevelPermission(documentLevelPermission) .build(); PDFElectronicSealJob pdfElectronicSealJob = new PDFElectronicSealJob(asset, pdfElectronicSealParams); pdfElectronicSealJob.setSealImageAsset(sealImageAsset); String location = pdfServices.submit(pdfElectronicSealJob); PDFServicesResponse pdfServicesResponse = pdfServices.getJobResult(location, PDFElectronicSealResult.class); Asset resultAsset = pdfServicesResponse.getResult().getAsset(); StreamAsset streamAsset = pdfServices.getContent(resultAsset); Files.createDirectories(Paths.get("output/")); OutputStream outputStream = Files.newOutputStream(new File("output/sealedOutput.pdf").toPath()); LOGGER.info("Saving asset at output/sealedOutput.pdf"); IOUtils.copy(streamAsset.getInputStream(), outputStream); outputStream.close(); } catch (ServiceApiException | IOException | SDKException | ServiceUsageException ex) { LOGGER.error("Exception encountered while executing operation", ex); } } } 64-bit Support og Fremtiden
Med udgivelsen af Acrobat SDK 2021 introducerede Adobe understøttelse for Windows 64-bit. Dette er en væsentlig opgradering, der muliggør bedre ydeevne og hukommelsesstyring for applikationer, der kører på moderne 64-bit systemer. Udviklere, der tidligere har brugt 32-bit plugins, skal opgradere disse til 64-bit for at sikre kompatibilitet med den nyeste 64-bit version af Acrobat. SDK'en leverer 64-bit offentlige header-filer for at lette denne overgang for tredjepartsudviklere.
Fordele ved at bruge Acrobat SDK
Integration af Adobe Acrobat SDK i din udviklingsproces tilbyder en række betydelige fordele:
- Øget Effektivitet: Automatisering af PDF-relaterede opgaver sparer tid og reducerer risikoen for manuelle fejl.
- Forbedret Brugeroplevelse: Tilføjelse af interaktive elementer og brugerdefinerede funktioner kan gøre PDF-dokumenter mere engagerende og brugervenlige.
- Styrket Sikkerhed: Implementering af digitale signaturer og adgangskontroller sikrer dokumenternes integritet og fortrolighed.
- Tilpasningsevne: SDK'en giver mulighed for at skræddersy PDF-funktionalitet præcist til dine specifikke behov og arbejdsgange.
- Bred Kompatibilitet: Understøttelse af flere programmeringssprog og platforme sikrer, at du kan integrere PDF-funktioner i din eksisterende teknologistak.
Ofte Stillede Spørgsmål (FAQ)
Hvad er forskellen mellem Acrobat SDK og Adobe PDF Services API?
Acrobat SDK fokuserer primært på at udvikle udvidelser og integrationer direkte med desktop-versionen af Adobe Acrobat. Adobe PDF Services API'er er cloud-baserede REST API'er, der tilbyder PDF-funktionalitet via skyen og er ideelle til server-side og webapplikationer.
Kræver Adobe Acrobat SDK en Acrobat-licens?
Generelt er Acrobat SDK gratis at downloade og bruge til at udvikle applikationer. Dog kan den endelige anvendelse af dine udviklede applikationer, især hvis de interagerer med Acrobat-desktop, kræve, at brugerne har en gyldig Adobe Acrobat-licens.
Hvilke programmeringssprog understøttes af Acrobat SDK?
Acrobat SDK understøtter primært udvikling med C++ (via COM-objekter og C-API'er) og JavaScript til interne PDF-scripts. Adobe PDF Services API'er understøtter derimod en bredere vifte af sprog som Node.js, Java, Python og .NET.
Hvordan kan jeg komme i gang med Acrobat SDK?
Du kan downloade Acrobat SDK fra Adobe Developer-webstedet. Det anbefales at starte med at gennemgå dokumentationen og de medfølgende eksempler for at få en bedre forståelse af API'erne og deres anvendelse.
Konklusion
Adobe Acrobat SDK og de relaterede Adobe PDF Services API'er er uvurderlige ressourcer for enhver udvikler, der arbejder med PDF-filer. Ved at udnytte disse værktøjer kan du ikke kun automatisere og strømline dine PDF-processer, men også tilføje avancerede funktioner som digitale signaturer og interaktive elementer, der forbedrer både effektivitet og sikkerhed. Den seneste 64-bit understøttelse og de cloud-baserede REST API'er cementerer Adobe's engagement i at levere moderne og skalerbare løsninger til PDF-håndtering.
Hvis du vil læse andre artikler, der ligner Adobe Acrobat SDK: Dinamiser din PDF-arbejdsgang, kan du besøge kategorien Software.
