OCRmyPDF als API

Senden Sie ein gescanntes PDF oder Bild und erhalten Sie es als durchsuchbares PDF/A zurück. OCRmyPDF und Tesseract, gehostet, hinter einem API-Schlüssel.

Zuletzt aktualisiert

Preis 2 Credits pro Seite. Ein Bild zählt als eine Seite.
Dateien PDF, PNG oder JPEG, bis 25 MB und 200 Seiten
Sprachen Englisch, Deutsch, Spanisch und Französisch
Ausgabe Standardmäßig PDF/A-2b, oder ein normales PDF
Zeitlimit 15 Minuten pro Job
Ergebnisse 7 Tage nach dem Einreichen gespeichert

OCRmyPDF ergänzt gescannte PDFs und Bilder um eine Textebene. Die Seiten sehen gleich aus, aber Sie können ihren Text durchsuchen, markieren und kopieren. Tesseract erkennt den Text.

Sie senden eine Datei an die Warteschlange und erhalten eine Job-ID zurück. Ist der Job erfolgreich, laden Sie das durchsuchbare PDF herunter. Die Ausgabe ist PDF/A-2b für die Langzeitarchivierung, es sei denn, Sie fordern ein normales PDF an.

Preis und Limits

Ein Job kostet 2 Credits pro Seite, und ein Bild zählt als eine Seite. Die Credits werden beim Einreichen des Jobs abgebucht. Schlägt der Job fehl, werden sie erstattet.

Eine Datei darf bis zu 25 MB und 200 Seiten haben. Ein Job wird nach 15 Minuten abgebrochen. Das Ergebnis wird 7 Tage nach dem Einreichen aufbewahrt und dann gelöscht. Die hochgeladene Datei wird gelöscht, sobald der Job beendet ist. Tarife und Credit-Kontingente stehen auf der Preisseite.

Selbst gehostet oder gehostet

Um OCRmyPDF selbst zu betreiben, installieren Sie es mit Tesseract und einem Sprachpaket pro Sprache. Sie halten beides aktuell und geben jedem Job ein Zeit- und Speicherlimit. Ein langer Scan kann mehrere GB Arbeitsspeicher belegen.

Gehostet senden Sie die Datei mit einem API-Schlüssel. Derselbe Schlüssel und dasselbe Credit-Guthaben gelten für die anderen Dokument-Engines dieser Website.

Schnellstart mit curl

Einen Scan einreichen. Der Teil type= setzt den Content-Type der Datei:

curl -H "X-API-Key: $KEY" \
  -F "file=@scan.pdf;type=application/pdf" \
  -F language=deu -F rotate_pages=true \
  https://api.pagespool.com/v1/ocrmypdf/jobs

Die Antwort nennt den Job und seinen Preis:

{"job_id": "3f2a…", "status": "queued", "pages": 3, "credits": 6, "poll_url": "/v1/jobs/3f2a…", "result_url": "/v1/ocrmypdf/jobs/3f2a…/result"}

Fragen Sie den Job ab, bis status succeeded oder failed ist:

curl -H "X-API-Key: $KEY" https://api.pagespool.com/v1/jobs/JOB_ID

Laden Sie dann das durchsuchbare PDF herunter:

curl -H "X-API-Key: $KEY" -o scan-ocr.pdf https://api.pagespool.com/v1/ocrmypdf/jobs/JOB_ID/result

Abfragen und Herunterladen sind kostenlos.

Schnellstart mit Python

import time

import httpx

API = "https://api.pagespool.com"
headers = {"X-API-Key": "YOUR_KEY"}

with open("scan.pdf", "rb") as fh:
    resp = httpx.post(
        f"{API}/v1/ocrmypdf/jobs",
        headers=headers,
        files={"file": ("scan.pdf", fh, "application/pdf")},
        data={"language": "eng", "deskew": "true"},
        timeout=120,
    )
resp.raise_for_status()
job = resp.json()

while httpx.get(f"{API}{job['poll_url']}", headers=headers).json()["status"] not in (
    "succeeded",
    "failed",
):
    time.sleep(5)

result = httpx.get(f"{API}{job['result_url']}", headers=headers, timeout=120)
result.raise_for_status()  # a failed job answers its reason as a problem
with open("scan-ocr.pdf", "wb") as out:
    out.write(result.content)

Optionen

Senden Sie die Optionen als Formularfelder neben file:

Feld Werte Standard
language eng, deu, spa, fra eng
output_type pdfa (PDF/A-2b), pdf pdfa
mode skip, redo, force skip
deskew true, false false
rotate_pages true, false false

mode entscheidet, was mit Seiten geschieht, die schon Text haben. skip lässt sie, wie sie sind. redo ersetzt eine frühere OCR-Ebene. force führt OCR auf jeder Seite als Bild aus. mode=redo lässt sich nicht mit deskew kombinieren. Diese Anfrage antwortet mit 400 und kostet nichts.

Fehler

Jeder Fehler ist ein JSON-Problem-Dokument mit einem code. Eine abgelehnte Einreichung kostet nichts. Ein fehlgeschlagener Job wird erstattet, und seine Ergebnis-URL nennt den Grund:

Code Status Bedeutung
incompatible_options 400 mode=redo zusammen mit deskew
payload_too_large 413 Die Datei ist größer als 25 MB
unsupported_media_type 415 Die Datei ist kein PDF, PNG oder JPEG
too_many_pages 422 Die Datei hat mehr als 200 Seiten
bad_input 422 Die Datei ist nicht lesbar, oder ein Bild hat Transparenz
encrypted_pdf 422 Das PDF braucht zum Öffnen ein Passwort
already_has_text 409 Die Seiten haben schon Text: Senden Sie mode=redo oder mode=force
pdfa_conversion_failed 422 Das Ergebnis ist kein gültiges PDF/A: Senden Sie output_type=pdf
job_not_ready 409 Der Job ist noch nicht fertig
result_expired 410 Das Ergebnis wurde nach 7 Tagen gelöscht
ocr_failed, ocr_timeout 500 Die OCR ist fehlgeschlagen oder lief länger als 15 Minuten

API-Schlüssel

Jeder OCR-Aufruf braucht einen API-Schlüssel. Ohne gültigen Schlüssel antwortet ein Aufruf mit 401. Sie können den Schlüssel auf drei Arten senden:

  • im Header X-API-Key: YOUR_KEY,
  • im Header Authorization: Bearer YOUR_KEY,
  • per HTTP Basic mit beliebigem Benutzernamen und dem Schlüssel als Passwort, etwa curl -u "x:YOUR_KEY". Ein Client, der nur eine Basis-URL annimmt, kann den Schlüssel darin mitgeben, als https://x:YOUR_KEY@ gefolgt vom API-Host.

Setzen Sie den Schlüssel nie in einen Pfad oder einen Query-String. Beide landen in Zugriffsprotokollen.

MCP-Server

OCRmyPDF hat einen eigenen MCP-Server unter https://api.pagespool.com/mcp/ocrmypdf/. Er bietet zwei Tools. ocr_pdf reiht eine Datei ein, gesendet als Base64 bis 4 MB oder als Download-Link bis 25 MB. get_ocr_result meldet den Job und, sobald er erfolgreich war, einen Download-Link zum PDF, der 60 Minuten funktioniert. Die Tools brauchen einen API-Schlüssel und kosten so viel wie die API.

Ohne Code ausprobieren

Das kostenlose OCR-Tool führt dieselbe OCR für Dateien bis 3 Seiten und 4 MB aus, ohne Konto.

OCRmyPDF ist eine Marke ihres Inhabers; pagespool ist mit ihm nicht verbunden.