A complete demo collection for exis-pdfeditor — a high-performance PDF toolkit for Python.
The library is the Python wrapper around the same Exis.PdfEditor engine that powers the .NET package and the PDF Batch Editor desktop application. The native binary is bundled in the wheel — no .NET runtime required.
Most Python PDF libraries (PyPDF, pdfplumber, ReportLab) either:
- Render and rebuild the document, breaking forms, signatures, and exact spacing
- Only read the PDF, with no editing capability
- Require heavy native dependencies like Poppler or Ghostscript
Exis.PdfEditor parses the PDF content stream directly and performs surgical, in-place edits. The output is byte-for-byte identical to the original except for the changes you requested. Forms stay intact. Digital signatures remain valid. Spacing is pixel-perfect.
The native AOT-compiled binary is under 10 MB total and ships in the wheel — no runtime, no system dependencies.
| # | Demo | Function | Description |
|---|---|---|---|
| 01 | Inspect | inspect(), analyze_pages() |
Metadata, fonts, pages — license-free triage |
| 02 | Find & Replace | find_replace() |
Single, batch, regex, styled, multi-line wrap |
| 03 | Text Extraction | extract_text() |
Plain and structured text extraction |
| 04 | Merge & Split | merge(), split(), bookmarks() |
Combine, split, split-by-outline |
| 05 | Form Filling | fill_form(), list_fields() |
Fill, flatten, alignment, duplicate widgets |
| 06 | Redaction | redact() |
Text, regex, and area-based redaction |
| 07 | Watermark | watermark() |
Text watermarks with positioning |
| 08 | Stamp | stamp() |
Overlay/underlay another PDF |
| 09 | Optimize | optimize() |
Compress and reduce file size |
| 10 | Encrypt & Decrypt | encrypt(), decrypt() |
Passwords and permissions |
| 11 | Page Editing | rotate(), crop(), reorder(), delete_pages(), insert_blank_pages() |
Page-level operations |
| 12 | Image Replace | find_images(), replace_image() |
Logo replacement |
| 13 | Digital Signatures | sign(), verify() |
X.509 / PKCS#7 signing |
| 14 | PDF/A Compliance | pdfa_validate(), pdfa_convert() |
Archival format |
| 15 | Bates Stamp | bates_stamp() |
Legal Bates numbering |
| 16 | Region Edit | erase_region(), replace_region() |
Rectangular erase / patch |
| 17 | Vector Graphics | find_vector_graphics(), replace_vector_graphic() |
Path-drawn logo find & replace |
| 18 | Metadata | get_metadata(), set_info(), remove_info() |
XMP + /Info |
| 19 | OCR | make_searchable_pdf(), redact_scanned_pdf() |
Scanned PDFs (Windows) |
| 20 | Signature Image | list_signature_fields(), fill_signature() |
Paint image into signature field |
Run every numbered demo in sequence: examples/run_all.py.
pip install exis-pdfeditorPlatform wheels are available for:
- Windows x64 (
win_amd64) - Linux x64 (
manylinux_2_17_x86_64) - macOS ARM64 / Apple Silicon (
macosx_11_0_arm64)
git clone https://github.com/exisllc/ExisPdfPythonDemo.git
cd ExisPdfPythonDemopython -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
pip install -r requirements.txt# Run a single demo
python examples/02_find_replace.py
# Or run them all in sequence
python examples/run_all.pyEach demo writes its output to the output/ directory next to the script.
import exis_pdfeditor
# 14-day trial activates automatically — no key needed
exis_pdfeditor.initialize()
result = exis_pdfeditor.find_replace(
"input.pdf", "output.pdf",
"Acme Corp", "Globex Industries",
)
print(f"Replaced {result.totalReplacements} occurrences across {result.pagesModified} pages")That's it. No SDK setup, no native binaries to install, no Java/.NET runtime to configure.
info = exis_pdfeditor.inspect("document.pdf")
print(f"{info.pageCount} pages, encrypted: {info.isEncrypted}")
print(f"Title: {info.title}, Author: {info.author}")
print(f"Form fields: {info.formFieldCount}")result = exis_pdfeditor.find_replace(
"template.pdf", "filled.pdf",
pairs=[
{"search": "{{NAME}}", "replace": "John Smith"},
{"search": "{{DATE}}", "replace": "2026-04-07"},
{"search": "{{AMOUNT}}", "replace": "$1,250.00"},
],
)exis_pdfeditor.find_replace(
"input.pdf", "output.pdf",
pairs=[
{"search": r"\d{3}-\d{2}-\d{4}", "replace": "XXX-XX-XXXX", "isRegex": True},
],
)exis_pdfeditor.fill_form(
"w9_template.pdf", "w9_filled.pdf",
fields={
"FirstName": "Jane",
"LastName": "Doe",
"Email": "jane@example.com",
},
flatten=True,
)exis_pdfeditor.encrypt(
"report.pdf", "report_protected.pdf",
user_password="openme",
owner_password="secret",
permissions=["Print"], # Only printing allowed
)exis_pdfeditor.sign(
"contract.pdf", "contract_signed.pdf",
cert_path="cert.pfx",
cert_password="certpass",
reason="Approved",
signer_name="Jane Doe",
)For a complete tour, browse the examples/ folder. Numbered demos cover the public API surface (01–20); run them all with python examples/run_all.py.
| Tier | Behavior |
|---|---|
| Free | inspect(), analyze_pages(), pdfa_validate(), and dump_structure() work without any license |
| Trial | Call initialize() with no key — 14 days, all features unlocked |
| Licensed | Pass your key to initialize("XXXX-XXXX-XXXX-XXXX") or set EXIS_PDF_LICENSE_KEY |
| Evaluation | After trial expiry, all features work on documents up to 3 pages |
Purchase a developer license at pdfbatcheditor.com/developers. $499/year per developer.
- Python 3.9 or later
- Windows x64, Linux x64, or macOS ARM64
- ~10 MB on disk for the bundled native binary
- No external dependencies
ExisPdfPythonDemo/
├── README.md
├── LICENSE # MIT (this demo collection)
├── requirements.txt
├── .gitignore
├── examples/
│ ├── _common.py # Shared helpers (output dir, sample PDF)
│ ├── 01_inspect.py … 20_signature_image.py
│ ├── 00_Video_Walk_Thru*.py # Short video fixtures
│ └── run_all.py
├── samples/ # Drop your own test PDFs here
└── docs/
└── API_QUICK_REFERENCE.md
- API Quick Reference — Every function, every parameter, at a glance
- PyPI page — Latest version, release notes
- Developer page — .NET and Python product info
This demo suite is licensed under the MIT License.
exis-pdfeditor is a commercial library. The 14-day trial is fully featured with no credit card required. After trial expiry, all features remain available on documents up to 3 pages. Visit the PyPI page or developer page for licensing options.
Built with exis-pdfeditor by Exis LLC.