Tool · runs entirely in your browser
pdfplumber Playground
The real pdfplumber 0.11.10, running in WebAssembly on your device. Open a PDF to see every character, word, line and table cell, tune table_settings with live feedback, measure crop boxes, and copy the Python that reproduces what you see.
- Private. Your file is never uploaded.
- Exact. Same library, same output as
pip install pdfplumber. - Free. No account, no limits beyond your browser's memory.
Drop a PDF here or choose a sample above.
Text-based PDFs work best. Scanned pages have nothing for pdfplumber to read until OCR adds a text layer.
Text and objects
Run pdfplumber to see extract_text() for this page.
Table Settings Lab
Explicit lines: none
table_settings = # defaults
Run pdfplumber to detect tables.
Crop and coordinates
Drag a rectangle on the page. pdfplumber's coordinates are in points from the top-left corner: (x0, top, x1, bottom).
Drag a box on the page to measure it.
PDF Doctor
Checks why extraction might fail: missing text layer, (cid:x) fonts, duplicated characters, rotation and ruling lines.
What you can do here
(x0, top, x1, bottom) and compare crop(), within_bbox() and outside_bbox() on that region.How it works
The page is drawn by pdf.js. Everything else comes from Python: when you press Run pdfplumber, a Web Worker downloads Pyodide (CPython compiled to WebAssembly, version 314.0.7), installs the pdfminer.six 20260107 and pdfplumber 0.11.10 wheels exactly as published on PyPI, and runs a small script that calls extract_words(), debug_tablefinder(), crop() and friends on your file. The overlay you see is the JSON those calls return, drawn over the pdf.js render in pdfplumber's own coordinate system.
pdfplumber's rendering dependencies (Pillow and pypdfium2, used by to_image()) are deliberately not installed here, which keeps the download smaller; pdf.js does the rendering instead.
Limits
- Very large PDFs (hundreds of pages, files over 60 MB) are slow in the browser. The Doctor checks the first 40 pages. Use pdfplumber locally for batch work; see performance.
- Encrypted PDFs ask for the password, which stays in the page.
- Scanned PDFs show no text: there is nothing to read until OCR adds a text layer (how).
Questions
Is this the real pdfplumber?
Yes. The Playground installs the unmodified pdfplumber 0.11.10 and pdfminer.six 20260107 wheels from PyPI into Pyodide, a build of Python for WebAssembly, and calls the same functions you would call locally.
Is my PDF uploaded anywhere?
No. The file is read by your browser and handed to Python running in a Web Worker on your device. After the engine has loaded, the Playground makes no network requests with your data.
Why does the first load take a few seconds?
The browser downloads the Python runtime, the standard library, pdfminer.six (most of its size is CJK font maps) and pdfplumber, about 20 MB in total. Browsers cache these files, so later visits start much faster.
What is different from running pdfplumber locally?
Text, words, objects, tables, cropping and settings behave identically. Page images are drawn by pdf.js in the browser instead of page.to_image(), so anti-aliasing can differ slightly, but every overlay coordinate comes from pdfplumber.
Next: install pdfplumber locally with the install guide, or follow the tutorial with the same sample files.