Use case · PDF Extractor

Parsing Complex Multi-Column PDFs for Data Engineers

How ETL pipeline authors parse borderless stream tables, multi-column layouts, and un-anchored text blocks into normalized JSON data streams.

Open PDF Extractor Add to VS Code
Free · runs in your browser · your files are never uploaded

TLDR

Data engineers waste hundreds of hours fighting tabular data hidden inside PDF documents. Standard text extractors scramble multi-column layouts and mix up adjacent table columns when vertical lines are missing. PDF Processor uses spatial geometry clustering, bipartite column matching, and Y-band tolerance controls to turn unstructured PDF pages into clean JSON or HTML streams.

The Targeted Persona: Data Engineers and ETL Authors

You build ingestion pipelines that digest thousands of vendor specifications, invoices, and research papers.

When incoming documents drop into your storage buckets, simple string extractors mash parallel columns into a single unreadable sentence. You need a parser that respects document geometry, identifies stream tables without outer borders, and outputs deterministic data models.

MetricLine-by-Line String DumpSpatial Geometry Clustering
Column SeparationFails on multi-column textResolves X-coordinates into distinct gutters
Borderless TablesMerges adjacent numerical cellsIsolates cells using Y-band histogram clustering
Execution LocationServer cluster background queueBrowser edge, local CLI, or background worker
Structural AccuracyLow (text order relies on PDF encoding)High (reconstructs reading order from spatial coordinates)

The Problem: Scrambled Spatial Coordinates

PDF documents do not contain native concept tags for paragraphs or table rows. They store individual characters pinned to absolute X and Y coordinates.

When a document has two columns, a naive parser reads straight across the page width, grabbing line one of column one and line one of column two in the same sentence. When tables lack grid lines, basic tools collapse column gutters into whitespace debris.

How PDF Processor Reconstructs Spatial Flow

Our engine computes horizontal and vertical projection histograms across page elements. It applies bipartite column matching to group text baselines into clean vertical columns and horizontal blocks.

// Bipartite column detection and region clustering
import { analyzePDF } from '../extraction/vector/pdfAnalyzer.js';

const analysis = await analyzePDF(pdfBuffer); const page = analysis.pages[0];

// Access detected lattice and stream table regions const streamTables = page.regions.filter(r => r.type === 'STREAM_TABLE');

streamTables.forEach(table => { console.log(Table bbox: x=${table.bbox.x}, y=${table.bbox.y}, w=${table.bbox.w}, h=${table.bbox.h}); console.log(Confidence score: ${table.confidence}); });

Rule of thumb: do not rely on character stream order in a PDF file; always group text items by spatial coordinate bounding boxes.

Concrete Evidence: Bipartite Column Separation

When tested against a 2-column academic paper with dense formulas, standard text extractors produce interleaved lines. Our spatial layout engine separates the text into distinct column streams with zero line contamination.

[Extraction Benchmark]
Sample: 2-Column Technical Specification (Page 4)
Naive Extractor Result: "Line 1 Left Line 1 Right Line 2 Left Line 2 Right" (Failed)
PDF Processor Result:
  Column 1: ["Line 1 Left", "Line 2 Left"]
  Column 2: ["Line 1 Right", "Line 2 Right"]
Column Contamination Rate: 0.0%

Tradeoffs

Extremely noisy scanned documents with heavy skew or background artifacts require a preprocessing deskew pass before spatial clustering achieves peak accuracy.

One Thing to Watch For

Adjust the R_COL_GAP_MIN slider upward when processing documents with wide paragraph indentation to prevent paragraphs from being split into separate columns.

PDF Extractor — Pull text, tables, and vector geometry out of PDFs — in the browser, with no upload.