Skip to content

PDF-SDK 2.4.1 is out.See what’s new

PDF-SDK

Put a real PDF editor inside your app.

PDF-SDK is a PDF editor SDK for iOS, Android, the web, Flutter and React Native. Your users edit the text already in the file, fill and build forms, mark up, sign and verify — all on their device.

Change the text already in the PDF, in any script — its font, size and colour — then move, rotate or restack it.

Fits the stack you already ship.

A native PDF editor for each platform, installed the way that platform expects — the same engine and the same behaviour underneath.

iOS and iPadOS

Native UI
SwiftUI and UIKit
Install with
Swift Package Manager
  1. 1Add the package with Swift Package Manager.
  2. 2Set your license key once, at startup.
  3. 3Open a PDF in the editor and get the edited file back.
Read the iOS guide
import SwiftUI
import PDFEditorUI

@main
struct MyApp: App {
    init() { PDFEditorSDK.setLicenseKey("PE1.eyJ2Ijox…") }
    var body: some Scene { WindowGroup { ContentView() } }
}

// Present the editor; the edited PDF comes back as Data.
PDFEditorView(url: pdfURL) { edited in
    try? edited.write(to: pdfURL, options: .atomic)
} onCancel: { }

Mac

Native UI
Mac Catalyst
Install with
Swift Package Manager

The same PDFEditorUI as on iOS, with desktop behaviour — one code base for iPhone, iPad and Mac.

  1. 1Add the package with Swift Package Manager.
  2. 2Set your license key once, at startup.
  3. 3Open a PDF in the editor and get the edited file back.
Read the Mac guide
// Mac Catalyst target — the same code as iOS
import SwiftUI
import PDFEditorUI

@main
struct MyApp: App {
    init() { PDFEditorSDK.setLicenseKey("PE1.eyJ2Ijox…") }
    var body: some Scene { WindowGroup { ContentView() } }
}

// Present the editor; the edited PDF comes back as Data.
PDFEditorView(url: pdfURL) { edited in
    try? edited.write(to: pdfURL, options: .atomic)
} onCancel: { }

Android

Native UI
Jetpack Compose and Views
Install with
Gradle
  1. 1Add the package with Gradle.
  2. 2Set your license key once, at startup.
  3. 3Open a PDF in the editor and get the edited file back.
Read the Android guide
// Once, in Application.onCreate()
PdfEditorSdk.setLicenseKey("PE1.eyJ2Ijox…")

setContent {
    PdfEditorScreen(
        pdfPath = file.absolutePath,
        onSave = { bytes -> file.writeBytes(bytes) },
        onClose = { finish() },
    )
}

Web

Native UI
TypeScript on WebAssembly
Install with
npm
  1. 1Add the package with npm.
  2. 2Set your license key once, at startup.
  3. 3Open a PDF in the editor and get the edited file back.
Read the web guide
import { PDFEditor } from '@pdfsdk/editor';

const editor = await PDFEditor.create(canvas, {
  licenseKey: 'PE1.eyJ2Ijox…',   // issued for your domain
});

editor.open(new Uint8Array(await file.arrayBuffer()));
const edited = editor.save();    // the edited PDF

Flutter

Native UI
A Dart plugin over the native SDKs
Install with
Flutter plugin
  1. 1Add the package with Flutter plugin.
  2. 2Set your license key once, at startup.
  3. 3Open a PDF in the editor and get the edited file back.
Read the Flutter guide
await PdfEditor.setLicenseKey('PE1.eyJ2Ijox…');

final String? edited = await PdfEditor.open(
  path: file.path,
  mode: PdfEditorMode.annotate,   // optional
);

React Native

Native UI
A TypeScript package over the native SDKs
Install with
npm
  1. 1Add the package with npm.
  2. 2Set your license key once, at startup.
  3. 3Open a PDF in the editor and get the edited file back.
Read the React Native guide
import { PdfEditor } from '@pdfsdk/react-native-pdf-editor';

await PdfEditor.setLicenseKey('PE1.eyJ2Ijox…');

const edited = await PdfEditor.open({ path: filePath });
if (edited) await upload(edited);

One engine under every editor.

PDF-SDK is not a set of separate libraries. It is one cross-platform PDF SDK: one PDF engine sits under a native editor on each platform.

  • The same result everywhereEvery editor renders and edits with the same core, so a document looks and behaves the same on iPhone, Android, Mac and the web.
  • One core, one versionA fix or a feature in the core reaches every platform together — PDF-SDK is version 2.4.1 everywhere.
  • Nothing to hostThe engine runs inside your app or the browser tab. There is no document server to run, and no document to upload.

Cross-platform packages

FlutterReact Native
Built on the native SDKs — the same editor, from Dart or TypeScript.

iOS and iPadOS

Android

Mac

Web

WebAssembly

PDF-SDK core

Rendering, text editing, forms, annotations and signatures

Runs on your user’s device — phone, tablet, desktop or browser tab

Your users’ documents never leave their device.

PDF-SDK opens, edits and saves files inside your app or the browser tab. Here is exactly what goes over the network — and what never does.

What leaves the device

  • The document, and every page in itNever
  • Text, images, forms and signatures your users addNever
  • Your users’ names, emails or accountsNever
  • Device identifiersNever
  • License key, your app’s ID and the SDK versionOnly for online licenses, to confirm the license. Standard licenses send nothing at all.To confirm

Our license server never stores your key or your users’ IP addresses. Individual check-ins are deleted after 35 days.

License key

PE1.eyJ2IjoyLCJpZCI6ImxpY19…

Example
Licensed toYour company
Appsios: com.yourcompany.appandroid: com.yourcompany.appweb: app.yourcompany.com
CheckedOn the device, by the SDK
OfflineWorks offline — online licenses re-confirm at least every 30 days by default

No watermark and no reduced mode — licensed means fully working.

Licensed per app. A key names the bundle IDs, package names or domains it covers, so a key copied into another app does not work.

Trial

The full SDK in any app on every platform, until it expires.

Perpetual

A one-time license per app, with a period of updates.

Subscription

Every release while you are subscribed.

Enterprise

Site, wildcard and OEM terms.

Compare license options

Questions, answered.

What teams ask before they add PDF-SDK to an app. Something else on your mind?

iOS and iPadOS, Mac (through Mac Catalyst), Android, the web, Flutter and React Native. Every platform uses the same engine, so a document looks and behaves the same everywhere.

Yes. Users change the existing text itself — in any script, with its font, size and colour — and can move, rotate or restack it. It is not limited to adding new text boxes on top of the page.

No. PDF-SDK opens, edits and saves files inside your app or the browser tab. An online license check sends the license key, your app’s identifier and the SDK version — never document content or user data.

Yes. Standard license keys are checked on the device and need no network at all. Online licenses confirm with the license server from time to time and keep working offline in between — 30 days by default.

Per app: a key names the bundle IDs, package names or domains it covers. Choose a perpetual license with a period of updates, a subscription, or enterprise terms for site, wildcard and OEM use.

Yes. A free 7-day trial unlocks every feature on every platform, in any app, with no watermark and no card — and the live demo runs the web editor in your browser.

Never. There is no watermark and no reduced mode: with a valid key the SDK works fully, and without one the editor does not open documents.

With the tools your platform already uses: Swift Package Manager on Apple platforms, Gradle on Android, npm on the web and in React Native, and a plugin in Flutter. Set your key once at startup and open a document.

Yes. On iOS, Android, Flutter and React Native you choose the modes and tools, hide or rename menu items, set the colour scheme and add your own actions.

Yes. Every platform also has a document API, so your code can make the same kinds of edits the editor offers — for example reading and replacing text, adding text and images, or filling forms — and save the result.

Try it in your app.

A free trial unlocks every feature on every platform, in any app. Open a document today.

Talk to us

Questions about licensing, several apps, volume, or OEM and site terms — we will work out what fits.