OCR-API – Opprett søkbare PDF-er fra bilder og skanninger
MaraDocs OCR-API oppretter søkbare PDF-er med tekstlag. Originaldokumentet bevares – tekst er valgbar og søkbar. Ikke bare ekstrahert tekst.
Skannede dokumenter og bilder inneholder tekst som verken er valgbar eller søkbar. Mange OCR-API-er returnerer bare ekstrahert tekst, ikke originaldokumentet med et usynlig tekstlag. Man ønsker samme PDF – samme layout og samme visning – men med valgbart, søkbart innhold. Det er dette en ordentlig OCR-API for søkbare PDF-er bør levere.
Hvorfor en egen søkbar PDF-OCR-løsning tar uker
De som ønsker å bygge dette selv, oppdager raskt at Tesseract, EasyOCR eller Cloud-OCR bare returnerer ren tekst og avgrensningsbokser. For å opprette en søkbar PDF må teksten vises usynlig over originalbildet eller den opprinnelige PDF-en. Dette krever koordinering av koordinatsystemer, fonter, kodinger og PDF-struktur. Ulike språk, fonter og layout øker kompleksiteten. En robust OCR-API som holder det egne dokumentet intakt krever betydelig utviklingsinnsats.
Hvordan MaraDocs OCR-API løser dette på minutter
MaraDocs API utfører OCR og returnerer en PDF med usynlig innlagt tekstlag. Man får originaldokumentet – layout, bilder, visning – med valgbar og søkbar tekst. Ingen separat tekstfil. Ingen nedstrippet versjon. Samme dokument, forbedret.
OCR-arbeidsflyt: Valider, OCR, Optimaliser
For bilder: valider, deretter img.ocrToPdf. For PDF-er: valider, deretter pdf.ocrToPdf (valgfritt etter pdf.orientation for å korrigere roterte sider på forhånd). High-level flow.ocrImg og flow.ocrPdf kombinerer orientering, OCR og optimalisering i ett kall. Output er alltid et PDF-håndtak – samme dokument med et usynlig tekstlag – som kan lastes ned eller sendes videre til komposisjon, komprimering eller e-postarbeidsflyter. Pipeline forblir på serversiden; ingen ny opplasting mellom stegene.
Get your API key in under a minute
Register for a free account and get your API key in under a minute. Of course we'll provide you with some developer credits.
Try MaraDocs API now →Hva som skiller MaraDocs: Workspaces, Webview og tysk personvernlovgivning
De fleste dokument-API-er tvinger til opplasting, behandling, nedlasting og ny opplasting for neste steg. Med MaraDocs kjører OCR i eget workspace. Kjed sammen med dokumentekstraksjon, komposisjon eller komprimering – send PDF-håndtaket direkte til neste operasjon. Ingen ny opplasting, færre rundturer.
Når OCR-resultater må korrigeres manuelt – feilgjenkjente tegn, komplekse layout eller dårlig kvalitet på skanninger – kan app.maradocs.io åpnes for manuell gjennomgang og redigering. Brukere får full manuell kontroll når automatiseringen når sine grenser.
All behandling skjer i Tyskland (Maramia GmbH), kryptert i hvile og under overføring. Workspaces utløper etter 7 dager. Ingen data forlater EU. For personvernsensitive OCR-arbeidsbelastninger er dette relevant.
TypeScript-kode for å opprette søkbare PDF-er med OCR
API-referanse: data/upload, img/validate, pdf/validate, img/ocr/to/pdf, pdf/ocr/pdf, data/download/pdf
import { MaraDocsClient } from "@maramia/maradocs-sdk-ts";
import { okImg } from "@maramia/maradocs-sdk-ts/models/img";
import { okPdf } from "@maramia/maradocs-sdk-ts/models/pdf";
const client = new MaraDocsClient({ workspaceSecret: workspace_secret });
// High-Level: last opp, valider, fullstendig pipeline, last ned
const pdfHandle = await client.flow.ocrImg(imageFile);
const blob = await client.data.downloadPdf({ pdf_handle: pdfHandle });
// Low-Level: Bilde – last opp, valider, OCR, last ned
const uploaded = await client.data.upload(imageFile);
const validated = await client.img.validate({ unvalidated_file_handle: uploaded.unvalidated_file_handle });
const imgHandle = okImg(validated);
const ocrPdf = await client.img.ocrToPdf({
img_handle: imgHandle,
options: { embed_in_blank_page: { size: { width: 210, height: 297 }, position: "center" } },
});
const blob2 = await client.data.downloadPdf({ pdf_handle: ocrPdf.pdf_handle });
// PDF: last opp, valider, ocrToPdf, last ned
const pdfUploaded = await client.data.upload(pdfFile);
const pdfValidated = await client.pdf.validate({ unvalidated_file_handle: pdfUploaded.unvalidated_file_handle });
const pdfOcr = await client.pdf.ocrToPdf({ pdf_handle: okPdf(pdfValidated) });
const blob3 = await client.data.downloadPdf({ pdf_handle: pdfOcr.pdf_handle });
Python-kode for OCR til søkbar PDF
API-referanse: data/upload, img/validate, img/ocr/to/pdf, pdf/ocr/pdf, data/download/pdf
# pip install python-decouple requests
"""OCR an image to a searchable PDF using MaraDocs. Set ACCOUNT_SECRET in .env or environment."""
import sys
import time
from pathlib import Path
import requests
from decouple import config
API_URL = "https://api.maradocs.io/v1"
def create_workspace() -> dict:
"""Create a workspace and return auth headers."""
r = requests.post(
f"{API_URL}/workspace",
headers={"Authorization": f"Bearer {config('ACCOUNT_SECRET')}"},
json={"subaccount": None},
)
ws = r.json()
return {"Authorization": f"Bearer {ws['workspace_secret']}"}
def upload_file(path: Path, auth: dict) -> dict:
"""Upload a file via two-step flow (signed URL + S3 POST). Returns unvalidated_file_handle."""
data = path.read_bytes()
resp = requests.post(
f"{API_URL}/data/upload",
headers={**auth, "Content-Type": "application/json"},
json={"name": path.name, "size": len(data)},
).json()
requests.post(
resp["post_url"],
data=resp.get("post_header", {}),
files={"file": (path.name, data, "image/png")},
)
return resp["unvalidated_file_handle"]
def run_job(path: str, payload: dict, auth: dict, timeout: int = 60) -> dict:
"""Run a job and poll until complete. Returns the result (unwraps response if present)."""
url = f"{API_URL}/{path}"
r = requests.post(url, headers=auth, json=payload).json()
job_id = r["job_id"]
start = time.time()
while time.time() - start < timeout:
poll_r = requests.get(f"{url}/{job_id}", headers=auth)
if poll_r.status_code == 200:
return poll_r.json()
raise TimeoutError(f"Job {path} timed out")
def download_pdf(pdf_handle: str, auth: dict) -> bytes:
"""Request signed URL and fetch PDF bytes."""
r = requests.post(
f"{API_URL}/data/download/pdf",
headers=auth,
json={"pdf_handle": pdf_handle},
)
info = r.json()
dl = requests.get(info["url"], headers=info.get("headers", {}))
return dl.content
def main() -> None:
img_path = Path(sys.argv[1]) if len(sys.argv) > 1 else Path("photo.png")
auth = create_workspace()
handle = upload_file(img_path, auth)
validate = run_job("img/validate", {"unvalidated_file_handle": handle}, auth)
img_handle = validate["response"]["img_handle"]
ocr_result = run_job("img/ocr/to/pdf", {"img_handle": img_handle}, auth)
pdf_handle = ocr_result.get("pdf_handle") or ocr_result.get("response", {}).get("pdf_handle")
Path("searchable.pdf").write_bytes(download_pdf(pdf_handle, auth))
print("searchable.pdf created")
if __name__ == "__main__":
main()
Oppsummering og neste steg
En OCR-API som oppretter søkbare PDF-er – originaldokumentet med usynlig tekstlag – er tilgjengelig. MaraDocs bevarer det opprinnelige layout og legger til valgbar, søkbar tekst. Flere relaterte arbeidsflyter: Dokumentskanner, PDF-behandling og Bilde på blank side.
Useful links
Prøv nå: MaraDocs API | TypeScript SDK
Abonner på nyhetsbrevet nå
Hold deg oppdatert og motta de siste nyhetene, artikler og ressurser via e-post.