Independent guide. Not affiliated with the pdfplumber project or its maintainers.Official repository: jsvine/pdfplumber ↗

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.

Loads Pyodide + pdfplumber 0.11.10 (about 20 MB, cached after the first visit). Your PDF never leaves this device.
No file yet
x — · top —

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

Hover over text to inspect it.
Run pdfplumber to see extract_text() for this page.
Python for this view

What you can do here

InspectHover any glyph to see its text, font, size and coordinates. Toggle chars, words, lines, rects, curves, images and annotations. Change x_tolerance and see words merge or split.
TablesThe Table Settings Lab: every option as a control, with edges, intersections and cells redrawn as you change them. Click the page to add explicit column lines. Download the table as CSV.
Crop & coordinatesDrag a box to get (x0, top, x1, bottom) and compare crop(), within_bbox() and outside_bbox() on that region.
DoctorFinds scanned pages, (cid:x) fonts, duplicated characters, rotation and missing ruling lines, and links to the fix.

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

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.