Advanced OCR: Full-Page Markdown, JSON, and Structured Tables on Web and Desktop

By the PDF Extractor engineering team.

PDF Extractor's OCR pipeline used to mean one thing: Tesseract, plain text. That's still there, and it's still the fast default. But both the web app and the desktop app now also ship an advanced OCR engine -- a vision-language model that reads a full page the way a person would, and hands back Markdown, JSON, or plain text with headings, reading order, multi-column layout, and tables preserved.

This post covers what changed, how it works on each platform, and how to call it from the UI, the REST API, the desktop CLI, or the MCP server.


What "advanced" OCR actually does differently

Tesseract recognizes characters inside an image. It doesn't know that a line of text is a heading, that two columns should be read top-to-bottom-then-across rather than straight across, or that a grid of numbers is a table with a header row. For a lot of scanned documents that's fine -- you just want the words.

The advanced engine is a vision-language model (VLM) instead of a character recognizer. It looks at the rendered page image and produces a structured transcription: heading levels, paragraph breaks, reading order across columns, and tables rendered as real Markdown/HTML/CSV tables instead of a wall of misaligned numbers.

Both engines plug into the same OCR modes PDF Extractor already had:

The advanced engine is currently page-mode only -- that's where layout reconstruction matters most. Element-mode OCR still uses Tesseract.

Three output formats

Full-page advanced OCR returns one of:

Tesseract only ever produces text; Markdown and JSON are advanced-engine-only.

Tables, structured, independent of OCR mode

Alongside page OCR, PDF Extractor can now transcribe detected Table regions into machine-readable tables -- Markdown (GFM), HTML, or CSV -- via the same advanced engine. This is a separate toggle (ExtractTables / --extract-tables) from OcrMode, so you can turn on structured tables without running full-page OCR, or combine both: page-level Markdown output with tables kept structured inside it, instead of flattened into transcribed text.


On the web

Advanced OCR is available on Starter and Business plans (same tier gate as OCR generally). In the extraction UI, open Advanced Settings, set OCR mode to Page, and switch the OCR engine dropdown from "Tesseract (plain text)" to "Advanced OCR model (structured or plain text)" -- an output-format picker (Text / Markdown / JSON) appears once that's selected. Table transcription has its own checkbox and format picker (Markdown / HTML / CSV), independent of the OCR settings.

The same controls are available directly on the PDF extraction REST API:

curl -X POST https://pdf-xtract.com/api/extract-elements \
  -H "Authorization: Bearer pdf-ext_your_token" \
  -F "[email protected]" \
  -F "Categories=Table" \
  -F "OcrMode=page" \
  -F "OcrEngine=advanced" \
  -F "OcrOutputFormat=markdown" \
  -F "ExtractTables=true" \
  -F "TableFormat=markdown"

The advanced engine runs against a server-configured model -- you don't need your own API key or GPU. If you're driving PDF Extractor from Claude or another MCP client, the MCP server exposes the identical ocr_engine / ocr_output_format parameters.

On the desktop -- fully local, still free-form

The offline PDF extractor runs the same advanced-OCR concept with no network round-trip and no per-page cost. In Settings → OCR Engines you can point it at:

The same options are exposed on the desktop CLI:

pdf-extractor-desktop extract input.pdf -o output \
  --ocr page --ocr-engine advanced --ocr-output-format markdown \
  --advanced-provider managed \
  --extract-tables --table-format markdown

or against a running Ollama server:

pdf-extractor-desktop extract input.pdf -o output \
  --ocr page --ocr-engine advanced --ocr-output-format json \
  --advanced-provider ollama --advanced-model qwen3-vl:4b-instruct

Because it's local, none of this counts against a page quota, and the document never leaves the machine -- the same privacy story as the rest of the desktop app, just extended to the OCR step. GPU acceleration (Metal, CUDA, ROCm, Vulkan, DirectML, depending on platform) applies to the managed models the same way it applies to element detection.


Requirements at a glance

CapabilityWebDesktop
Tesseract page/element OCR (text only)Starter or BusinessIncluded
Advanced OCR (text/markdown/json, page mode only)Starter or Business, server-configured keyIncluded -- managed model, or bring your own via Ollama/LM Studio
Structured table transcription (Markdown/HTML/CSV)Starter or Business, server-configured keyIncluded -- same provider options as advanced OCR

Try it

If you're choosing between the web and desktop versions generally, see Web vs Desktop -- Which Version Is Right for You?.