By Jetformat
Text extraction is a read operation that returns content already stored in a document. Validation checks whether a file can be parsed as its declared format. Neither operation renders a visual proof, performs OCR, or certifies the business accuracy of the contents.
Read and validate before a write
- Run
jetformat validateon the input and check its exit status. - Choose plain text for a quick read, Markdown for human review, or JSON for structured processing.
- Extract to a named output path when the result needs to be retained.
- Compare key values and reading order against the source before a later conversion or edit.
text
jetformat text slides.pptx -o slides.txt
jetformat text report.pdf
jetformat text contract.docx --format markdown
jetformat text finance.xlsx --format json -o finance.json
Extracts existing text layers in reading order to stdout or -o. XLSX includes visible worksheets only. Not OCR: a scanned PDF returns nothing useful. Free, no account.
--format chooses the shape:
| Format | What you get |
|---|---|
plain (default) |
One line per paragraph, cell, or text box. |
markdown (md) |
Headings (#), numbered and dashed lists with depth, pipe tables. One ## Sheet: section per visible worksheet, as a grid with row numbers and column letters. One ## Slide N: Title section per slide with speaker notes as a quote. One ## Page N section per PDF page with detected tables. |
json |
The same structure as data. |
JSON shape by format:
{ "path": "contract.docx", "format": "docx",
"blocks": [ { "type": "heading", "level": 1, "style": "Heading1", "text": "1. Scope" },
{ "type": "list_item", "level": 1, "ordered": true, "text": "..." },
{ "type": "table", "rows": [["Milestone", "Fee"], ["M1", "48,000"]] } ] }
{ "format": "xlsx", "sheets": [ { "name": "Q3", "range": "A1:F12", "rows": [["Region", "July"], ...], "formulas": { "E5": "=SUM(B5:D5)" } } ] }
{ "format": "pptx", "slides": [ { "number": 3, "title": "Pipeline", "blocks": [...], "notes": "..." } ] }
{ "format": "pdf", "pages": [ { "number": 1, "text": "...", "tables": [[["Stage", "Deals"], ["Qualified", "38"]]] } ] }
Block types are heading, paragraph, list_item, and table. level is the heading level, the list depth, or a slide paragraph’s outline level. Word headings are detected from the paragraph or style outline level and from Heading N / Title style names. Sheet rows are the used range from A1, so rows[4][1] is cell B5. Related: word tables --json and pdf tables --json return only the tables.
validate
jetformat validate slides.pptx
jetformat validate report.pdf
jetformat validate font.ttf
Checks that the file is well-formed for its type. Exit code 0 means valid. Free and needs no account, so run it before a batch to skip files that will fail.
What successful validation does not prove
A structurally valid file can still use missing fonts, contain unsupported formulas, or include a scanned page with no extractable words. Use validation as an initial gate, then check the property the task actually depends on. If the user needs a visual check, convert and render separately rather than inferring layout from extracted text.
For an illustrative 12-page PDF, validate, text, and pdf info each cost 0 credits. Rendering 3 pages for visual review would add 3 credits. The distinction is the operation, not whether the extracted output was saved to disk.
Keep extraction results traceable
Preserve the source path and the selected output format alongside the job result. JSON structure can help a downstream program retain sheet or page boundaries, but those boundaries do not certify reading order. If text is missing on a scan, use a separate OCR workflow and review the recognized words. Adobe’s scan-to-PDF documentation describes OCR options in Acrobat; Jetformat itself does not perform OCR. See text extraction versus OCR.