PdfSpace
Read, edit and review PDFs — locally, in the browser or on desktop
PdfSpace is a local-first PDF application built in C# with Uno Platform and SkiaSharp. The browser runs a real Uno WebAssembly app with the same document, editing and rendering libraries as the desktop host, and an Acrobat-inspired shell brings together tabs, comments, form preparation, native object and original-text editing, on-device OCR, AES-256 protection, redaction and page organization. No document or password is sent to a processing service.

What makes PdfSpace special
Familiar if you know Acrobat-style PDF editors — but original, local‑first and written end‑to‑end in C#.
Genuine Uno WebAssembly
The browser build is a real Uno/Skia application sharing its engines with the desktop host — not a PDF.js viewer or HTML canvas app.
Review without flattening
Highlights, notes, replies, ink, shapes, stamps and links are written back as native PDF annotation objects.
Prepare and fill forms
Create text, check-box and dropdown fields, fill imported forms, and import or export values as XFDF or JSON.
Edit native objects
Select native text, paths, images and Form groups on the page, then move, resize, align, group, crop or restyle them with one-step undo.
Real original-text edits
Replaces actual PDF text-showing operands instead of covering them with a white rectangle; unsupported cases are rejected.
Local Scan & OCR
Recognize image-only PDFs in English, Polish or German, review words against the scan, and export a searchable PDF.
Protect and redact a copy
Export AES-256 PDFs with separate opening and owner passwords, or build a confirmed image-only redacted copy.
Indexed performance
Indexed page geometry, bounded search indexes and bounded picture/source caches reduce repeated layout and parsing work on large documents.
33 capabilities, 7 areas
Read and navigate
- Multiple document tabs for PDFs and editable workspaces
- Search and copy text; zoom, pan and Ctrl+wheel zoom around the pointer
- Continuous, single-page and two-page layouts with virtualized thumbnails
- Original PDF outlines alongside editable workspace bookmarks
- Local named destinations and internal links that follow page reorganization
Review and comment
- Text, highlight, underline, strikethrough, notes and threaded replies
- Ink, shapes, arrows, stamps and links
- Move, resize and recolor annotations; resolve comments; undo and redo
- Supported annotations and replies export as native PDF objects
Forms
- Create text, check-box and dropdown fields directly on a page
- Fill imported text fields, check boxes, radio groups and single-select choices
- Edit tooltips, defaults, read-only/required/multiline flags, font size and maximum length
- Import/export plain field values as XFDF or versioned JSON in one undoable transaction
- Check required fields and Tab / Shift+Tab between supported widgets
Edit existing content
- Replace supported original text, including text inside nested Form XObjects
- Select, move, resize, rotate, flip, replace, insert or delete native image placements
- Align, distribute, crop, stack, group and copy/paste objects across documents
- Edit real path geometry, control points and solid fill/stroke
- Native opacity, blending, stroke caps/joins, miter and dash editing
- Shift constrains movement and aspect ratio; Alt resizes from the center
Scan & OCR
- Local recognition in English, Polish or German at 150, 200 or 300 DPI
- Recognize image-only PDFs or import PNG/JPEG scans honoring EXIF orientation
- Review low-confidence words against the original scan and correct them
- Export a searchable PDF with an invisible Unicode text layer
- Browser self-hosts pinned Tesseract.js/WASM models; native hosts use Tesseract 5
Organize and export
- Reorder, rotate, duplicate, delete, crop, combine, extract and split pages
- Export native PDF or a separately labeled flattened visual PDF
- Download PNG, text, form data or an editable .pdfspace workspace
- Browser recovery in IndexedDB; atomic temporary-file recovery on desktop
Protect and redact
- AES-256 revision 6 output with distinct opening and owner passwords
- Print, copy and edit permission flags; owner authentication before re-editing
- Browser encryption runs in an isolated, hash-pinned QPDF WASM worker
- Raster redaction rebuilds every page as an image with burned-in marks
Run PdfSpace right here
Open the live WebAssembly build and try every workflow on the included original sample documents — no upload of private files needed. Switch viewports, go fullscreen and tick off the guided tour as you explore.
Try PdfSpace live
Open the live WebAssembly build and try every workflow on the included original sample documents — no upload of private files needed.
Real C# · Uno WebAssembly · runs locally in your browser12 libraries you can embed
PdfSpace is assembled from independently reusable libraries. Hover the graph to trace dependencies; click a node to jump to its package.
PdfSpace.Core
Workspace, page, annotation, field and geometry models with validated JSON
PdfSpace.Layout
Crop/rotation transforms and viewport/page layouts without UI dependencies
PdfSpace.Editing
Transactional editing, shared field state and bounded undo/redo
PdfSpace.Documents
PdfPig import, text extraction, search, page ranges and XFDF/JSON form data
PdfSpace.Rendering.Skia
Source-pinned Apache-2.0 PdfPig Skia renderer with image-alpha, dash and miter fixes
PdfSpace.Skia
Cached rendering, overlays, visual/PNG export and raster redaction
PdfSpace.Pdf
PDFsharp native annotation/form writer, source-text editing and security-provider contract
PdfSpace.Ocr
Local OCR contracts, raster preparation, bounded TSV decoding and snapshot batches
PdfSpace.Controls
Custom Uno icons, command buttons, tabs, panels, palettes and dialogs
PdfSpace.Viewer
Embeddable document viewport with annotation editing, form input and thumbnails
PdfSpace.Storage
Platform-neutral file, recovery, clipboard and print contracts
PdfSpace.Workbench
Complete multi-document shell and PDF workflows
From engine to workbench
Layers build bottom‑up: each one depends only on those beneath it.
Immutable workspace, annotation and field models, layout transforms and transactional undo — free of Uno, rendering and storage.
PdfSpace.CorePdfSpace.LayoutPdfSpace.EditingPdfPig import and search feed a source-pinned Skia renderer with cached pictures, overlays and visual export.
PdfSpace.DocumentsPdfSpace.Rendering.SkiaPdfSpace.SkiaA PDFsharp-backed structured writer, pluggable security provider and local OCR pipeline.
PdfSpace.PdfPdfSpace.OcrCustom Uno controls and an embeddable Skia viewport for pointer editing, forms and thumbnails.
PdfSpace.ControlsPdfSpace.ViewerThe multi-document shell composes the workflows; hosts inject browser or desktop storage contracts.
PdfSpace.WorkbenchPdfSpace.StorageEmbed, script, extend
git clone https://github.com/wieslawsoltes/PdfSpace.git
cd PdfSpace
python3 scripts/fetch-assets.py
dotnet workload install wasm-tools
# Native engine and PDF round-trip tests.
dotnet run --project tests/PdfSpace.Tests -c Release
# Desktop host.
dotnet run --project src/PdfSpace.App -f net10.0-desktop -p:PdfSpaceDesktopOnly=true
# Browser publish and static-root collection.
dotnet publish src/PdfSpace.App -f net10.0-browserwasm -c Release \
-o artifacts/publish -p:WasmShellWebAppBasePath=/PdfSpace/
python3 scripts/collect-site.py artifacts/publish artifacts/site
python3 scripts/serve-site.py --directory artifacts/site --port 4173File formats
Keyboard essentials
Continuously verified
Each push runs through GitHub Actions. The public browser build is deployed only from successful pipelines.
Toolchain
Third‑party NuGet packages
git clone https://github.com/wieslawsoltes/PdfSpace.git
cd PdfSpace
dotnet workload install wasm-tools
dotnet run --project src/PdfSpace.App -f net10.0-browserwasmWhat it doesn’t claim
The project documents its limits as carefully as its features.
- Functional PDF workflows, not complete or pixel-identical Adobe Acrobat compatibility
- Export PDF rewrites the document; it is not an incremental or guaranteed lossless save
- No XFA, form scripts/calculations, certificate signatures, full tagging/compliance or Office conversion
- Text editing has no paragraph reflow or complex-script shaping; unsupported encodings are rejected
- Redacted output is image-only; .pdfspace workspaces are unencrypted and keep the full original