Extracting JSON data from a PDF document
Extract structured data from PDF files as JSON for storage, API workflows, or analytics pipelines. This approach reduces manual entry and gives your application direct access to document content.
Download sampleHow Nutrient supports this workflow
Nutrient Java SDK handles structured extraction from PDF documents, including digital-native PDFs and PDFs that mix digital text with scanned content.
In this sample, VisionEngine.AdaptiveOcr uses an adaptive extraction pipeline that prefers native PDF text when available and falls back to OCR for image-based content when needed.
You don’t need to manage:
- Third-party OCR engine integration
- Switching between native-text extraction and OCR
- Document layout parsing
- Model download and initialization
- Conversion from extracted output to structured data
Use the SDK API to extract structured JSON in your application.
Complete implementation
This example shows a complete PDF-to-JSON extraction flow.
Specify a package name and create a new class:
package io.nutrient.Sample;Import the required classes from the SDK:
import io.nutrient.sdk.Document;import io.nutrient.sdk.Vision;import io.nutrient.sdk.enums.VisionEngine;import io.nutrient.sdk.exceptions.NutrientException;
import java.io.FileWriter;import java.io.IOException;
public class JsonDataExtraction {Create the main method and declare thrown exceptions:
public static void main(String[] args) throws NutrientException, IOException {Open the PDF with try-with-resources so the document closes automatically:
try (Document document = Document.open("input.pdf")) {Configure the Adaptive OCR engine, extract JSON content, and write it to output.json:
document.getSettings().getVisionSettings().setEngine(VisionEngine.AdaptiveOcr);
Vision vision = Vision.set(document); String contentJson = vision.extractContent();
try (FileWriter writer = new FileWriter("output.json")) { writer.write(contentJson); } } }}Understanding JSON output
extractContent() returns the public layout JSON structure for Vision extraction. The JSON document has an elements array. Each element represents one detected layout item in reading order.
The top-level JSON object contains these fields:
| Field | Description |
|---|---|
metadata | Optional per-page metadata array (one entry per page), including page size, resolution, skew angle, and rotation angle when available. |
elements | Layout elements sorted by reading order. |
classification | Optional document classification result when classification was run. |
languageDetection | Optional document language detection result when language detection was run. |
Each entry in elements includes common fields such as type, id, bounds, confidence, readingOrder, and pageNumber. The bounds object contains x, y, width, and height values in page-image coordinates. pageNumber is 1-based.
Common element types include:
type Value | Additional Fields |
|---|---|
paragraph | role, text, and optional words. |
handwriting | text and optional words. |
table | rowCount, columnCount, and cells. Each cell includes 0-based row and column indexes, rowSpan, colSpan, text, bounds, and optional words. |
keyValueRegion | pairs, where each pair contains a key entity, value entity, and relationship confidence. |
barcode | value and format. |
picture | classification, classificationConfidence, altDescription, and optional caption or footnote references. |
chart | htmlTable, optional summary, optional classification/classificationConfidence, and optional caption or footnote references. |
formula | latex. |
form | fields, where each field includes bounds, confidence, field type, and optional label data. |
A minimal output can look like this:
{ "elements": [ { "type": "paragraph", "id": "paragraph-1", "bounds": { "x": 72, "y": 96, "width": 468, "height": 24 }, "confidence": 0.99, "readingOrder": 0, "pageNumber": 1, "role": "Text", "text": "Invoice number INV-1001" } ]}Word-level data appears in words arrays when word output is enabled and available for the selected extraction engine.
Barcode data in JSON output
For documents that contain machine-readable codes, Vision extraction includes detected barcode data in the document layout output. Each detected barcode is represented as a layout element with the decoded value and barcode symbology, such as 1D barcodes, QR codes, Micro QR codes, PDF417, DataMatrix, Aztec, or MaxiCode.
Use this output when a pipeline needs both document text and embedded barcode values from the same pass. To focus specifically on barcodes, refer to the read barcodes with Vision guide.
Summary
The extraction flow has four steps:
- Open the PDF document.
- Configure the Adaptive OCR engine.
- Extract content as JSON with
Vision. - Write the JSON output to a file.
Nutrient handles adaptive extraction and content structuring, so you don’t need to implement PDF parsing, native-text detection, or OCR fallback logic.
You can download this sample package to run the example locally.