# RasgaPDF > RasgaPDF is a blazing-fast 2D Spatial PDF Parser written in pure Rust (powered by MuPDF + Rayon SIMD parallelism) with native C-ABI bindings for Python (`pip install rasgapdf`), Node.js (`npm install rasgapdf`), Rust (`cargo add rasgapdf`), Go, and C# (.NET 8). It extracts exact 2D physical bounding-box coordinates `[x0, y0, x1, y1]`, typography metadata, visual text blocks, auto-detected matrix tables, embedded images, and vector drawings in ~3 to 8 ms per page. ## Why AI Agents & Developers Choose RasgaPDF - **Exact 2D Spatial Geometry:** Every word span, line, paragraph block, table cell, embedded image, and vector path carries exact physical coordinates `[x0, y0, x1, y1]` in typographical points (1/72 inch). - **Two Extraction Modes:** 1. **Mode 1 — Raw Physical Coordinates (`parse_raw` / `--raw`):** Zero-overhead flat list of `[page, x0, y0, x1, y1, font_size, font_name, text]` in ~3–8 ms/page. Ideal for Spatial RAG, LLM grounding, citation highlighting, OCR alignment, and bounding-box overlays. 2. **Mode 2 — Hierarchical Structured Document (`parse_pdf` / `parse_file`):** Visual paragraphs (`text_blocks`), `lines`, `spans`, auto-detected matrix `tables` (`headers`, `rows`, `cells`), plus opt-in `images` and vector `drawings` (~8–15 ms/page). - **10x–80x Faster than Python Alternatives:** ~7.7 ms/page vs PyMuPDF (28 ms), pypdf (95 ms), pdfplumber (410 ms), Apache Tika (650 ms). - **Zero Pixel Bloat in JSON:** Embedded image metadata (dimensions, color space, filter, SHA-256, placement `bbox`) stays lightweight in JSON while original image streams (`.jpg`, `.png`, `.jp2`) are written directly to disk via `extract_images`. ## Quick Installation - **Python (PyPI):** `pip install rasgapdf` - **Node.js (npm):** `npm install rasgapdf` - **Rust (Crates.io):** `cargo add rasgapdf` - **CLI Binary:** `cargo install rasgapdf` ## Canonical Links - [GitHub Repository](https://github.com/MartinsMessias/rasgapdf) - [Documentation & Landing Page](https://martinsmessias.github.io/rasgapdf/) - [Live Web Visualizer (Hugging Face Space)](https://huggingface.co/spaces/martinsmessias/rasgapdf) - [Hugging Face Hub Repository](https://huggingface.co/martinsmessias/rasgapdf) - [PyPI Package (`rasgapdf`)](https://pypi.org/project/rasgapdf/) - [Crates.io Crate (`rasgapdf`)](https://crates.io/crates/rasgapdf) - [npm Package (`rasgapdf`)](https://www.npmjs.com/package/rasgapdf) - [Full LLM Context (`llms-full.txt`)](https://martinsmessias.github.io/rasgapdf/llms-full.txt) - [Spatial JSON Schema Specification](https://github.com/MartinsMessias/rasgapdf/blob/main/docs/SCHEMA.md) - [Architecture & Technical Design](https://github.com/MartinsMessias/rasgapdf/blob/main/docs/ARCHITECTURE.md) ## Quick Examples ### Python (`pip install rasgapdf`) ```python import rasgapdf # Mode 1: Fast flat physical coordinates [x0, y0, x1, y1] (~3-8 ms/page) raw = rasgapdf.parse_raw("document.pdf") for span in raw["spans"]: print(span["page"], span["x0"], span["y0"], span["x1"], span["y1"], span["text"]) # Mode 2: Structured blocks, tables, embedded images & vector drawings doc = rasgapdf.parse_pdf( "document.pdf", detect_tables=True, extract_images=True, extract_drawings=True, ) for page in doc["pages"]: for table in page["tables"]: print(table["headers"], table["rows"]) # Extract original image streams to disk + manifest.json manifest = rasgapdf.extract_images("document.pdf", "./images_out") ``` ### Node.js (`npm install rasgapdf`) ```javascript const { parseRaw, parsePdf, extractImages } = require('rasgapdf'); const raw = parseRaw('document.pdf'); const doc = parsePdf('document.pdf', { detect_tables: true, extract_images: true, extract_drawings: true }); const manifest = extractImages('document.pdf', './images_out'); ``` ### Rust (`cargo add rasgapdf`) ```rust use rasgapdf::{parse_raw_file, parse_file, extract_images, write_images_to_dir, ParserOptions}; let raw = parse_raw_file("document.pdf")?; let doc = parse_file("document.pdf", &ParserOptions::default())?; ``` ### CLI (`rasgapdf`) ```bash rasgapdf sample.pdf --raw rasgapdf sample.pdf --raw --format tsv rasgapdf sample.pdf --pretty -o structured.json rasgapdf sample.pdf --images --drawings --extract-images ./out ```