# pdfplumber.dev > An independent, tested guide to the pdfplumber Python library. Every example is executed against pdfplumber 0.11.10 (pdfminer.six 20260107) and shows its captured output. Independent: not affiliated with the pdfplumber project. Official source: https://github.com/jsvine/pdfplumber Each page is also available as Markdown by appending `index.md` to its URL (for example https://pdfplumber.dev/tables/index.md). ## Start - [Overview](https://pdfplumber.dev/) - [Install](https://pdfplumber.dev/install/): How to install pdfplumber with pip, uv, conda or Poetry on Windows, macOS and Linux, in Jupyter, Colab, VS Code and Docker, and how to check that it worked. - [Tutorial](https://pdfplumber.dev/tutorial/): A hands-on pdfplumber tutorial with real output at every step. Open a PDF, extract text and words, crop regions, pull tables, fix a table that fails, export CSV. - [Playground](https://pdfplumber.dev/playground/) ## Text - [Extract text](https://pdfplumber.dev/extract-text/): How pdfplumber's extract_text() works, how to keep the layout, fix missing spaces and doubled letters, drop table text, handle ligatures, and every option. - [Multi-column layouts](https://pdfplumber.dev/extract-text/columns/): Why pdfplumber mixes columns together and how to read multi-column PDFs in order, by splitting at the gutter, detecting it automatically, or handling a full-width title. - [Words, chars and fonts](https://pdfplumber.dev/words-chars-fonts/): Get word positions, font names and sizes with pdfplumber, and detect bold, italic, coloured, underlined and struck-through text and headings. - [Search text](https://pdfplumber.dev/search-text/): Find text in a PDF with pdfplumber's page.search(), with regex groups, case-insensitive matching, positions, the page a match is on, and the value next to a label. - [Crop and coordinates](https://pdfplumber.dev/crop-bbox/): How pdfplumber coordinates work (x0, top, bottom, doctop, y0), and how to crop regions, remove headers and footers, filter objects and handle page boxes and rotation. ## Tables - [Extract tables](https://pdfplumber.dev/tables/): How to extract tables with pdfplumber, the difference between extract_table, extract_tables and find_tables, how table detection works, and real fixes. - [table_settings](https://pdfplumber.dev/tables/settings/): Every pdfplumber table_settings option with its default and a before/after figure, including strategies, snap, join, intersection and edge_min_length_prefilter. - [Borderless tables](https://pdfplumber.dev/tables/borderless/): Extract tables that have no ruling lines with pdfplumber, using the text strategy or a gutter-based recipe that rebuilt our test table cell for cell. - [Table not detected](https://pdfplumber.dev/tables/not-detected/): Why pdfplumber cannot recognise a table, or splits and merges its cells, with a diagnostic function and a symptom-to-fix table tested on real PDFs. - [Multi-page tables](https://pdfplumber.dev/tables/multi-page/): Combine a table that continues over several PDF pages with pdfplumber, drop repeated headers, check it is the same table, and rejoin a row cut by a page break. - [Merged cells](https://pdfplumber.dev/tables/merged-cells/): Why pdfplumber returns None for merged table cells, how to fill them, rebuild rowspan and colspan, and join multi-line cell text. Tested on a sample table. - [Export to pandas, CSV, Excel](https://pdfplumber.dev/tables/export/): Turn pdfplumber tables into pandas DataFrames, CSV, Excel sheets, JSON and Markdown, clean numbers, and combine a table spread over many pages. ## Beyond text - [Scanned PDFs and OCR](https://pdfplumber.dev/ocr/): pdfplumber does not do OCR. How to detect scanned pages, add a text layer with OCRmyPDF and Tesseract, and still extract tables from a scan, with measured results. - [Images](https://pdfplumber.dev/images/): List the images in a PDF with pdfplumber, save them in their original format, render a page or region to PNG at any resolution, and avoid two silent quality traps. - [Visual debugging](https://pdfplumber.dev/visual-debugging/): Draw what pdfplumber sees onto the page with to_image(), draw_rects(), draw_lines() and debug_tablefinder(), read the colours, and check column guesses first. - [Performance](https://pdfplumber.dev/performance/): Measured pdfplumber speed and memory on 1 to 1,000 pages. Why page.close() halves the time and stops memory growth, where the time goes, and how many processes help. - [AI, RAG and LLMs](https://pdfplumber.dev/ai/): Feed PDFs to language models with pdfplumber. Convert pages to Markdown with headings and tables, chunk with page numbers, and what changed for PDFPlumberLoader. ## Reference - [API index](https://pdfplumber.dev/docs/): Every public pdfplumber function, method and property with its exact 0.11.10 signature, a one-line explanation and a link to a tested guide. Searchable. - [pdfplumber.open()](https://pdfplumber.dev/docs/open/): Every way to open a PDF with pdfplumber (paths, file objects, bytes, URLs) and every option of pdfplumber.open(), from pages and passwords to laparams and repair. - [Pages](https://pdfplumber.dev/docs/pages/): Work with pdfplumber Page objects. Count pages, loop over them, read page numbers, sizes and rotation, detect paper size, and find the page that contains some text. - [Objects](https://pdfplumber.dev/docs/objects/): Every pdfplumber object type (char, line, rect, curve, image, annot, hyperlink) with its real properties in 0.11.10, colours, the transformation matrix and derived edges. - [Structure tree](https://pdfplumber.dev/docs/structure/): Read a tagged PDF's structure tree with pdfplumber, get text in reading order and tables without geometry, and work around two bugs we found in 0.11.10. - [Form fields](https://pdfplumber.dev/docs/forms/): Read filled-in PDF form values with pdfplumber, including checkboxes and radio buttons, match fields to labels, and handle flattened forms where the fields are gone. - [Command line](https://pdfplumber.dev/cli/): Use pdfplumber from the terminal. Every option of the pdfplumber command in 0.11.10, with real output: CSV, JSON and text, pages, attributes, layout analysis, stdin. - [Releases](https://pdfplumber.dev/releases/): The latest pdfplumber version, how to check yours, every release since 0.7 with its pdfminer.six version, and the changes that break code when you upgrade. ## Troubleshooting - [Error index](https://pdfplumber.dev/errors/): Every common pdfplumber error message with its real cause and fix, reproduced on purpose so the messages are exact. Paste yours to filter, or diagnose a PDF. - [No module named pdfplumber](https://pdfplumber.dev/errors/no-module-named-pdfplumber/): Fix ModuleNotFoundError: No module named 'pdfplumber', import could not be resolved, NameError and has no attribute 'open', with a script that finds the cause. - [(cid:x) in text](https://pdfplumber.dev/errors/cid/): Why pdfplumber returns (cid:81)(cid:117)… instead of text, how to confirm the cause, when the chr() trick works, and the OCR fallback that always does. - [Missing spaces, doubled letters](https://pdfplumber.dev/errors/missing-spaces-duplicate-chars/): Fix pdfplumber text where words run together, letters are spaced out or doubled. Measure the gaps in your PDF, pick a tolerance, and remove shadows and fake bold. - [Malformed PDFs](https://pdfplumber.dev/errors/malformed-pdf/): What pdfplumber does with truncated, damaged and fake PDFs, tested on seven broken files you can download, and what repair=True really recovers. ## Compare - [Choosing a library](https://pdfplumber.dev/compare/): pdfplumber vs PyMuPDF, pypdf, pdfminer.six, pypdfium2, Camelot, tabula-py, markitdown and docling, measured on the same PDFs for speed, memory, reading order and tables. - [vs PyMuPDF](https://pdfplumber.dev/compare/pymupdf/): pdfplumber vs PyMuPDF (fitz) measured side by side. Speed, memory, tables, coordinates, licence (MIT vs AGPL), with the same code in both libraries. - [vs pypdf](https://pdfplumber.dev/compare/pypdf/): pdfplumber vs pypdf and PyPDF2. pypdf writes and edits PDFs; pdfplumber reads text, positions and tables. Measured differences and code that uses them together. - [vs Camelot](https://pdfplumber.dev/compare/camelot/): pdfplumber and Camelot 2.0 on the same ruled, partly ruled and borderless tables, checked against known answers. Accuracy, settings, speed, size and when to use each. - [vs pdfminer.six](https://pdfplumber.dev/compare/pdfminer/): pdfplumber is built on pdfminer.six. What each does, measured speed and memory, how coordinates differ, and how to get pdfminer's reading order inside pdfplumber. - [vs Tabula](https://pdfplumber.dev/compare/tabula/): pdfplumber and tabula-py on the same tables, checked against known answers. Default accuracy, merged cells, Java and its start-up cost, install size and when to use each. - [vs AI parsers](https://pdfplumber.dev/compare/ai-parsers/): pdfplumber against docling and MarkItDown on the same PDFs, born-digital and scanned. Speed, memory, reading order, tables, OCR and install size, all measured. ## Cookbook - [All recipes](https://pdfplumber.dev/cookbook/): Complete pdfplumber recipes for invoices, bank statements, web upload apps and cloud deployment. Each one runs end to end on sample files and checks its own results. - [Invoices](https://pdfplumber.dev/cookbook/invoices/): A complete, tested pdfplumber recipe for invoices. Header fields by label, the billing address, line items as Decimals, totals, and checks that catch silent errors. - [Bank statements](https://pdfplumber.dev/cookbook/bank-statements/): A tested pdfplumber recipe for bank statement PDFs. Transactions from every page, the statement's own balances, a row-by-row balance check, and CSV for accounting. - [Web apps](https://pdfplumber.dev/cookbook/web-apps/): Accept PDF uploads in FastAPI or Streamlit and extract text and tables with pdfplumber, in memory, with size limits, clear errors and tests. Both apps tested end to end. - [Cloud and URLs](https://pdfplumber.dev/cookbook/cloud/): Open PDFs from a URL or S3 with pdfplumber, and run it on AWS Lambda as a zip or container image. Tested on the official Lambda image, with package sizes and timings. ## About - [FAQ](https://pdfplumber.dev/faq/): Answers about pdfplumber's licence and commercial use, security and CVEs, OCR, editing PDFs, Python versions, other languages, maintenance and this site. - [About this site](https://pdfplumber.dev/about/): pdfplumber.dev is an independent, tested guide to the pdfplumber Python library. Why it exists, how every example is tested, and how to report errors. - [Contact](https://pdfplumber.dev/contact/): How to reach pdfplumber.dev to report a mistake, suggest a guide or ask about the site, and where to report bugs in the pdfplumber library itself.