Skip to main content

PDF Editor Offline

PDF Editor Offline

A free PDF editor that runs on your machine. No account, no upload step, no cloud storage.

GitHub stars MIT License PyPI version Python versions

Project Site

Open the live project site: PDF Editor Offline Project Site.

The self-contained local copy lives at site/index.html. It includes product docs, screenshots, sample PDFs, API/CLI notes, and release checks.

PDF Editor Offline gives you a web app, API server, CLI, and Python package for common PDF work:

  • Edit pages, annotations, images, metadata, watermarks, and signatures
  • Merge, split, rotate, crop, resize, compress, repair, protect, and unlock PDFs
  • Convert PDF to Word, PowerPoint, Excel, JPG, Markdown, TXT, EPUB, SVG, and PDF/A
  • Convert Word, PowerPoint, Excel, Markdown, TXT, CSV, JSON, HTML, and images to PDF
  • Clean metadata, remove hidden data, redact page areas, and clear app temp files
  • Run OCR and batch jobs locally

Screenshots

Captured from the local web app with the sample PDFs in examples/sample_pdfs/.

Editor workspace Text search and redaction
Editor workspace showing demo PDF Text search, font analysis, and permanent redaction
File attachments Merge PDFs
File attachment added in the annotations tool PDF merge completed successfully

More captures are in screenshots/, including image insertion, privacy cleanup, and PDF-to-TXT conversion.

Install

Install the published Python package and CLI from PyPI:

pip install pdf-editor-offline

Verify the install:

pdf-editor-offline --version
python -c "import pdf_editor_offline; print(pdf_editor_offline.__version__)"

From source:

git clone https://github.com/OthmaneBlial/pdf-editor-offline.git
cd pdf-editor-offline
pip install -e ".[dev]"

The PyPI package includes the Python API and CLI. Run the full local web app from a source checkout because the frontend is a separate React application.

Docker:

docker pull othmaneblial/pdf-editor-offline
docker run -p 8000:8000 othmaneblial/pdf-editor-offline

Run The App

Start the backend and frontend together:

./start.sh

Open http://localhost:3000.

Manual startup:

PYTHONPATH=. python -m uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload
cd frontend
npm install
VITE_API_BASE_URL="http://localhost:8000" npm run dev -- --port 3000

CLI

pdf-editor-offline --version
pdf-editor-offline extract text input.pdf
pdf-editor-offline extract images input.pdf --output-dir ./images
pdf-editor-offline edit metadata input.pdf title "Quarterly Report"
pdf-editor-offline edit delete-page input.pdf 0 --output output.pdf
pdf-editor-offline inspect object-tree input.pdf
pdf-editor-offline add image input.pdf stamp.png 0 100 120 180 80 --output stamped.pdf

Python

from pdf_editor_offline import PDFConverter, PDFManipulator

converter = PDFConverter()
converter.pdf_to_word("input.pdf", "output.docx")

manipulator = PDFManipulator()
manipulator.merge_pdfs(["file1.pdf", "file2.pdf"], "merged.pdf")

Develop

pip install -e ".[dev]"
pytest

Frontend:

cd frontend
npm install
npm test

Full local check:

./run_ci.sh

Release checklist:

pytest
cd frontend && npm test && npm run build
docker build -t pdf-editor-offline .
python -m build

Release Notes

See CHANGELOG.md for public release history.

Sample PDFs

Small demo PDFs live in examples/sample_pdfs/:

  • demo-basic.pdf for page editing, annotations, and exports
  • demo-redaction.pdf for permanent redaction checks
  • demo-privacy.pdf for metadata and hidden-data cleanup

Project Layout

api/                 FastAPI app
frontend/            React app
pdf_editor_offline/  Python package and CLI
examples/            Example scripts
examples/sample_pdfs/ Small local demo PDFs
tests/               Integration tests

License

MIT. See LICENSE.

Metadata

Release files for pdf-editor-offline 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pdf-editor-offline 2.0.1
File Size Uploaded
pdf_editor_offline-2.0.1.tar.gz 89.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pdf-editor-offline 2.0.1
File Interpreter ABI Platform
pdf_editor_offline-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 148.8 kB

Release files / pdf_editor_offline-2.0.1.tar.gz

Download URL pdf_editor_offline-2.0.1.tar.gz
Size 89.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f3e28c927d90e69a2c7ea7ace815fc97c7c08db83ec541c5bd9edc80a2d39d18
BLAKE2b-256 checksum
How to use checksums
77bcab5eb48f4465c7e6124ca88bba769bf2835d83be9f5dbd87cbd92033f5f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / pdf_editor_offline-2.0.1-py3-none-any.whl

Download URL pdf_editor_offline-2.0.1-py3-none-any.whl
Size 59.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
44745755c62db706b72b3091ef4ec967234355538bc6123445067a0952008219
BLAKE2b-256 checksum
How to use checksums
4ab4a040c7acd663948513e2ca0c449a3aa83cbf639cfead62a71c77e0362001
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page