Alle innlegg
|Også tilgjengelig på:DEENFRESITPL

Automatisk PDF-rotasjon – API for justering av PDF- og bildesider

Korriger feil roterte PDF- og bildesider med MaraDocs API for justeringsgjenkjenning. Tekstbasert gjenkjenning, automatisk korrigering, ingen manuell rotasjon.

Martin Kurtz
APIPDFJusteringDokumentbehandlingUtviklere
Automatisk PDF-rotasjon – API for justering av PDF- og bildesider

Skannede eller fotograferte dokumenter kommer ofte opp-ned eller rotert på siden. Manuell rotasjon skalerer ikke når hundrevis av dokumenter skal behandles. En automatisk API for PDF-rotasjon som gjenkjenner justeringen basert på det faktiske innholdet – ikke bare fra EXIF-data – og korrigerer den, ville fjerne et tidkrevende steg fra behandlingspipelinen.

De som behandler saksmapper, skanninger eller bilder i store mengder, vet: Feil justering koster tid.

Hvorfor en egen løsning for automatisk PDF- og bildesidejustering tar uker

De som ønsker å bygge dette selv, oppdager raskt at justeringsgjenkjenning vanligvis betyr: kjøre OCR, analysere tekstretning, utlede rotasjon. Tesseract, EasyOCR eller skybaserte OCR-tjenester kan hjelpe – men man må integrere dem, ta hensyn til forskjellige språk og tilordne resultater til 0°/90°/180°/270°-rotasjoner. PDF-er krever sidevis behandling. Å bygge en pålitelig API for dokumentjusteringsgjenkjenning koster integrasjonstid og finjustering.

Hvordan MaraDocs API for automatisk PDF-rotasjon løser dette på minutter

MaraDocs API tilbyr pdf.orientation og img.orientation. Begge bruker tekstbasert analyse for å bestemme riktig justering – mer pålitelig enn EXIF, som ofte er feil eller mangler. For PDF-er analyseres hver side; for bilder analyseres hele bildet. API-et returnerer det roterte resultatet samt sidevise vinkler med konfidensverdier. Ingen OCR-pipeline å vedlikeholde, ingen modellhosting, ingen språkkonfigurasjon. Ett API-kall og du får en korrigert handle for neste steg.

Arbeidsflyt for dokumentjustering: Validere, justere, kjede sammen

Last opp PDF eller bilde, valider for virus og format, deretter kall orientation. API-et analyserer hver side (eller hele bildet ved enkeltsideinndata) og returnerer en rotert handle. Denne handlen kan sendes direkte videre til OCR, sammensetning eller optimalisering – justering passer inn som ett steg i enhver pipeline. Filen trenger ikke lastes opp på nytt mellom stegene; det roterte resultatet forblir i workspace.

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 deg til å laste opp, behandle, laste ned og laste opp på nytt for neste steg. Med MaraDocs forblir filene i workspace. Etter justeringsgjenkjenning sendes den roterte handlen direkte til OCR, sammensetning eller optimalisering – ingen ny opplasting. Handles flyter; data forblir på serversiden.

Når justeringsgjenkjenningen er usikker – skanninger med lav kontrast, håndskrevne notater eller blandede språk – kan app.maradocs.io åpnes for manuell kontroll og korrigering. Brukere får full manuell kontroll når automatiseringen når sine grenser.

All behandling skjer i Tyskland (Maramia GmbH), kryptert i ro og under overføring. Workspaces utløper etter 7 dager. Ingen data forlater EU. For personvernssensitiv dokumentbehandling er dette relevant.

TypeScript-kode for automatisk PDF-rotasjon

API-referanse: data/upload, pdf/validate, img/validate, pdf/orientation, img/orientation, data/download/pdf

import { MaraDocsClient } from "@maramia/maradocs-sdk-ts";
import { okPdf } from "@maramia/maradocs-sdk-ts/models/pdf";

const client = new MaraDocsClient({ workspaceSecret: workspace_secret });

// Last opp og valider
const uploaded = await client.data.upload(pdfOrImageFile);
const pdfVal = await client.pdf.validate({ unvalidated_file_handle: uploaded.unvalidated_file_handle });
const pdfHandle = okPdf(pdfVal);

// PDF-justering
const oriented = await client.pdf.orientation({ pdf_handle: pdfHandle });

// Last ned resultat
const blob = await client.data.downloadPdf({ pdf_handle: oriented.rotated_pdf_handle });

// For bilder: bruk client.img.validate + client.img.orientation

Python-kode for dokumentjusteringsgjenkjenning

API-referanse: data/upload, pdf/validate, pdf/orientation, img/orientation, data/download/pdf

# pip install python-decouple requests
"""Fix PDF page orientation 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, "application/pdf")},
    )
    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:
    pdf_path = Path(sys.argv[1]) if len(sys.argv) > 1 else Path("input.pdf")
    auth = create_workspace()
    handle = upload_file(pdf_path, auth)
    validate = run_job("pdf/validate", {"unvalidated_file_handle": handle}, auth)
    pdf_handle = validate["response"]["pdf_handle"]
    oriented = run_job("pdf/orientation", {"pdf_handle": pdf_handle}, auth)
    rotated_handle = oriented["response"]["rotated_pdf_handle"]
    Path("rotated.pdf").write_bytes(download_pdf(rotated_handle, auth))
    print("rotated.pdf created")


if __name__ == "__main__":
    main()

Oppsummering og neste steg

En API for automatisk PDF-rotasjon og dokumentjusteringsgjenkjenning er tilgjengelig. MaraDocs behandler bilder og PDF-er med tekstbasert analyse. Flere relaterte arbeidsflyter: Dokumentskanner, PDF-behandling og Tekstgjenkjenning.


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.