Flutter PDF SDK

A PDF viewer and editor for Flutter, written entirely in Dart.

dart_pdf_editor renders PDFs with no PDFium and no platform views. The parser, content-stream interpreter, font engine, image decoders, and color management are one engine that runs the same on iOS, Android, macOS, Windows, Linux, and Flutter web. Apache-2.0, on pub.dev.

# Add the editor to your Flutter app
flutter pub add dart_pdf_editor
import 'package:dart_pdf_editor/dart_pdf_editor.dart';

// A complete PDF editor: viewer, tools, panels, undo/redo, save.
PdfEditorView(
  bytes: pdfBytes,
  onSave: (bytes) => writeFile(bytes),
)

// Or a view-only reader.
PdfReader(bytes: pdfBytes)

Features

The commercial-SDK feature set, open source.

Viewing, annotating, forms, signing, redaction, page management, text editing, and OCR. In other words, the things apps actually license a PDF SDK for.

PDF viewer

Zoom and pan with fit modes, deep-zoom detail rendering, text selection, full-text search, links, outlines, dark mode, and theming.

Annotations

Markup, pressure-sensitive ink, shapes, callouts, notes, stamps, and measurement tools, all with generated appearance streams. Select, move, resize, rotate, copy/paste, undo/redo.

Forms

Fill AcroForm text, checkbox, radio, and choice fields with regenerated appearances. You can also author fields: create, rename, retype, delete, flatten.

Digital signatures

Sign and validate up to PAdES B-LTA with RFC 3161 timestamps and long-term validation. Output validates in pyHanko, OpenSSL, and poppler.

Redaction

True redaction per the PDF spec: covered text and images are removed from the file bytes, not painted over.

Text editing

Rewrite existing page text in place with width-compensated metrics, and reflow whole paragraphs when the line count changes.

Pages

Reorder, delete, merge across documents, and split to new files, with drag-and-drop thumbnail UI included.

OCR

Pluggable engines add an invisible, selectable text layer to scans: on-device PP-OCR via ONNX, or any HTTP OCR service, including on Flutter web.

Robust parsing

Encrypted files (RC4/AES), broken real-world PDFs, CCITT/JBIG2/JPEG 2000 images, and ICC color, with conformance pinned against the Ghent suite and the PDF.js test corpus.

Performance

Pure Dart is not a compromise on speed.

On a real-world corpus of 49 files and 255 pages (CAD drawings, scans, reports, forms), the parse and content-stream interpreter runs about 1.9× faster than PDFium, the C++ engine Chrome uses. Full Flutter rasterization is currently about 2× slower end to end; the gap is image decoding and GPU raster, not the interpreter.

The benchmark harness diffs dart-pdf against PDFium file by file, so you can check the numbers yourself.

ms per page, lower is better 49 files · 255 pages
dart-pdf interpret (pure Dart)13.3 ms
PDFium (open + rasterize)24.9 ms
dart-pdf render (full Flutter raster)52.0 ms

Scale 2, PDFium via pypdfium2. Methodology and per-file results in the repo's benchmark/ directory.

Compare

How it compares to commercial PDF SDKs.

Nutrient (formerly PSPDFKit) and Syncfusion are mature, well-supported commercial products. The difference is architecture and licensing: dart-pdf is one open-source Dart engine on every platform Flutter ships to.

dart_pdf_editor Nutrient (PSPDFKit) Flutter Syncfusion Flutter PDF Viewer
License Apache-2.0, free and open source Commercial, contact sales Commercial or free community license
Flutter platforms iOS, Android, macOS, Windows, Linux, Web iOS, Android, Web iOS, Android, macOS, Windows, Web
Rendering engine Pure Dart, same engine everywhere Native engine per platform Native rendering; PDF.js on web
Annotations & forms Yes, authoring + filling Yes Yes
Digital signatures Sign + validate, PAdES up to B-LTA Yes Yes (via PDF library)
Source code Open, on GitHub Closed Source-available with license

Vendor capabilities summarized from their public documentation as of July 2026. Always check the vendors' current docs. No performance comparisons are made against commercial SDKs.

Packages

Strictly layered, use what you need.

The Flutter widgets sit on three pure-Dart packages that run on the VM, in CLIs and servers, and on the web. There is no Flutter dependency below the widget layer.