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() |
Metadata, fonts, pages, encryption — license-free |
| 02 | Find & Replace | find_replace() |
Single, batch, regex, styled replacements |
| 03 | Text Extraction | extract_text() |
Plain and structured text extraction |
| 04 | Merge & Split | merge(), split() |
Combine and split PDFs |
| 05 | Form Filling | fill_form() |
Read fields, fill, flatten |
| 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() |
Page-level operations |
| 12 | Image Replace | find_images(), replace_image() |
Logo replacement |
| 13 | Digital Signatures | sign(), verify() |
X.509 signing |
| 14 | PDF/A Compliance | pdfa_validate(), pdfa_convert() |
Archival format |
| 15 | Run All Demos | — | Master script that runs every example |
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. Every public function in the library has a runnable example.
| Tier | Behavior |
|---|---|
| Free | inspect(), 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 builder)
│ ├── 01_inspect.py
│ ├── 02_find_replace.py
│ ├── 03_text_extraction.py
│ ├── 04_merge_split.py
│ ├── 05_form_filling.py
│ ├── 06_redaction.py
│ ├── 07_watermark.py
│ ├── 08_stamp.py
│ ├── 09_optimize.py
│ ├── 10_encrypt_decrypt.py
│ ├── 11_page_editing.py
│ ├── 12_image_replace.py
│ ├── 13_digital_signatures.py
│ ├── 14_pdfa.py
│ └── 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.