PDF-behandlings-API – Slå sammen, dele og automatisk rotere PDF-er
Med MaraDocs PDF-manipulasjons-API kan du slå sammen, dele og automatisk rotere PDF-er. Forhåndsvisningsbilder, sideutvalg, retningskorrigering – alt i én API.
Må flere PDF-er slås sammen, bestemte sider velges ut eller feilroterte skanninger korrigeres? På vårt advokatkontor kom saker ofte som separate PDF-er – utredninger, klientbrev, rettsdokumenter – som måtte slås sammen og reorganiseres. En API for å slå sammen og dele PDF-er, som også korrigerer retning, ville forenkle denne arbeidsflyten betydelig.
Det høres enkelt ut – inntil man prøver å integrere PyMuPDF, pikepdf eller lignende biblioteker i en robust pipeline med virusskanning og validering.
Hvorfor en egen løsning for å slå sammen og dele PDF-er tar uker
PyMuPDF, pikepdf, PyPDF2 og reportlab dekker hver sin del av PDF-manipulasjon. Sammenslåing fungerer – inntil man støter på krypterte filer, korrupte streams eller uvanlige kodinger. De som vil bygge dette selv oppdager raskt at retningsgjenkjenning typisk krever OCR eller layoutanalyse – flere avhengigheter, mer infrastruktur. Å generere forhåndsvisningsbilder betyr å rendre sider til bilder, skalere og kode. Å bygge en pålitelig, validert PDF-manipulasjons-API koster tid og skjuler kompleksitet i spesialtilfeller.
Hvordan MaraDocs API for å slå sammen og dele PDF-er løser dette på minutter
MaraDocs API tilbyr PDF-behandling som tjeneste. Last opp, valider (virus og format), deretter sett sammen (slå sammen/del etter side), gjenkjenn og korriger retning, generer forhåndsvisningsbilder, optimaliser og OCR – alt via én enkelt API. Ingen opplastinger mellom stegene; filer forblir i workspace. Man spesifiserer hvilke sider fra hvilke PDF-er som skal kombineres, og API-en returnerer en enkelt sammensatt handle. Retningskorrigering bruker tekstbasert analyse, slik at roterte skanninger korrigeres automatisk.
Arbeidsflyt for dokumentbehandling: Last opp, valider, sett sammen, juster retning
Hver MaraDocs-arbeidsflyt starter med opplasting og validering. Last opp en PDF (eller bruk en fra et tidligere steg), valider for virus og format, deretter kjed sammen operasjoner. Compose-endepunktet muliggjør sammenslåing av flere PDF-er og utvalg av bestemte sider: f.eks. { pdf_handle: p1, pages: [{ page_number: 0 }, { page_number: 2 }] } for side 1 og 3 av det første dokumentet, pluss { pdf_handle: p2 } for hele det andre dokumentet. Retningsgjenkjenning bruker tekstbasert analyse for å automatisk korrigere roterte sider. For forhåndsvisningsbilder: rendre en side som bilde, deretter lag miniatyrbilde, deretter konverter til JPEG – alt med serversidige handles, ingen ny opplasting.
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 workspaces forblir filer på serversiden. Handles sendes mellom operasjoner: valider → sett sammen → juster retning → optimaliser. Færre rundturer, enklere kode, ingen behov for å spore filidentiteter på tvers av steg.
Når automatiseringen støter på et spesialtilfelle – feil siderekkefølge, en korrupt stream eller en uvanlig koding – kan app.maradocs.io åpnes med workspace-secret for manuell kontroll og redigering. Brukere får full manuell kontroll når pipelinen trenger menneskelig inngrep.
All behandling skjer i Tyskland (Maramia GmbH), med kryptering i hvile (SSE-C) og under overføring (TLS). Workspaces utløper etter 7 dager. Ingen data forlater EU. For GDPR- og BDSG-sensitive arbeidsbelastninger er dette relevant.
TypeScript-kode for å slå sammen og automatisk rotere PDF-er
API-referanse: data/upload, pdf/validate, pdf/compose, pdf/orientation, pdf/to/img, img/thumbnail, 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 begge PDF-ene
const up1 = await client.data.upload(pdf1File);
const up2 = await client.data.upload(pdf2File);
const val1 = await client.pdf.validate({ unvalidated_file_handle: up1.unvalidated_file_handle });
const val2 = await client.pdf.validate({ unvalidated_file_handle: up2.unvalidated_file_handle });
const pdf1 = okPdf(val1);
const pdf2 = okPdf(val2);
// Slå sammen PDF-er, velg bestemte sider
const composed = await client.pdf.compose({
pdfs: [
{ pdf_handle: pdf1, pages: [{ page_number: 0 }, { page_number: 2 }] },
{ pdf_handle: pdf2 },
],
});
// Gjenkjenn og korriger retning automatisk
const oriented = await client.pdf.orientation({
pdf_handle: composed.pdf_handle,
});
// Last ned resultat
const blob = await client.data.downloadPdf({ pdf_handle: oriented.rotated_pdf_handle });
// Valgfritt: Forhåndsvisningsbilde (rendre side som bilde, deretter lag miniatyrbilde)
const imgResult = await client.pdf.toImg({
pdf_handle: oriented.rotated_pdf_handle,
pages: [0],
});
const thumb = await client.img.thumbnail({
img_handle: imgResult.img_handles[0],
});
Python-kode for å slå sammen og justere retning på PDF-er
API-referanse: data/upload, pdf/validate, pdf/compose, pdf/orientation, data/download/pdf
# pip install python-decouple requests
"""Merge PDFs (with optional page selection) 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:
paths = (
[Path(p) for p in sys.argv[1:]]
if len(sys.argv) > 1
else [Path("doc1.pdf"), Path("doc2.pdf")]
)
auth = create_workspace()
handles = [upload_file(p, auth) for p in paths]
pdf_handles = [
run_job("pdf/validate", {"unvalidated_file_handle": h}, auth)["response"][
"pdf_handle"
]
for h in handles
]
if len(pdf_handles) == 2:
compose_payload = {
"pdfs": [
{"pdf_handle": pdf_handles[0]},
{
"pdf_handle": pdf_handles[1],
"pages": [{"page_number": 0}, {"page_number": 2}],
},
]
}
else:
compose_payload = {"pdfs": [{"pdf_handle": h} for h in pdf_handles]}
composed = run_job("pdf/compose", compose_payload, auth)
pdf_handle = composed.get("pdf_handle") or composed.get("response", {}).get(
"pdf_handle"
)
oriented = run_job("pdf/orientation", {"pdf_handle": pdf_handle}, auth)
rotated_handle = oriented["rotated_pdf_handle"]
Path("merged.pdf").write_bytes(download_pdf(rotated_handle, auth))
print("merged.pdf created")
if __name__ == "__main__":
main()
Oppsummering og neste steg
En API for å slå sammen og dele PDF-er med retningskorrigering og forhåndsvisningsbilder er klar til bruk. MaraDocs håndterer validering, komposisjon, retningsjustering og optimalisering i én arbeidsflyt. Mer informasjon: Dokumentskanner, Automatisk rotering, PDF-komprimering og Bilde på blank side.
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.