URL to PDF API

URL to PDF API: jede Webseite in ein sauberes PDF verwandeln

Übergeben Sie eine URL und bekommen Sie ein PDF der vollständig geladenen Seite — mit fertigem JavaScript, geladenen Schriften und angewandten Druckstilen. Kein Headless-Browser, den Sie betreiben, patchen oder skalieren müssen.

  • 50 kostenlose Renderings/Monat
  • Ohne Kreditkarte
  • Chromium 153

Was macht eine URL-zu-PDF-API?

Eine URL-zu-PDF-API öffnet eine Webadresse in einem Headless-Browser, wartet, bis die Seite fertig geladen ist, und speichert, was sie zeigt, als PDF. Sie senden die URL in einer HTTP-Anfrage und bekommen die Datei zurück — so können Sie Seiten archivieren, Dashboards exportieren oder Downloads anbieten, ohne selbst einen Browser zu betreiben.

URL to PDF API: die wichtigsten Fakten
EndpunktPOST https://api.dynamicdocumentapi.com/v1/pdf/from-url
EingabeJede öffentliche http- oder https-URL, optional mit Cookies, Headern oder Basic Auth
AusgabePDF als signierte URL (Standard), als Binärdaten oder base64
Rendering-EngineEngine 2026.4 auf Chromium (Chrome 153.0.8010.47), JavaScript standardmäßig aktiv
Wartenload, networkidle, CSS-selector, ready_flag oder feste delay; Zeitlimit 100 ms bis 300 s
RenderzeitVor allem davon bestimmt, wie schnell die Zielseite lädt. Über alle Renderings: Median 216 ms, p95 516 ms1
Seitengrößen13 benannte Größen oder eigene bis 200 Zoll; eine durchgehende Seite mit single_page
PreisFree: 50 Renderings/Monat. Bezahlt ab 15 €/Monat (jährlich abgerechnet) für 3.000 Renderings, automatisches Nachladen ab 6 € je 1.000

1. Gemessen über 1.664 erfolgreiche Renderings mit Engine 2026.4. total_ms = Zeit in der Warteschlange plus Verarbeitung im Worker, ohne API-Overhead und Netzwerkübertragung. Die Werte gelten für alle Eingabearten; eine URL-Erfassung dauert so lange, wie die Zielseite zum Laden braucht, plus die Wartebedingung, die Sie setzen.

Eine URL mit einer Anfrage in PDF umwandeln

Die Anfrage braucht ein Feld, url. Alles andere ist optional: Druckeinstellungen gehören in pdf, Zugangsdaten für Seiten hinter einem Login in http. Das Beispiel wartet, bis das Netzwerk ruhig ist — das erfasst die meisten Inhalte, die nach dem ersten Aufbau nachladen —, und speichert ein PDF im Format US Letter.

curl https://api.dynamicdocumentapi.com/v1/pdf/from-url \
  -H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/pricing",
    "pdf": {
      "paper": { "size": "Letter" },
      "wait":  { "until": "networkidle", "timeout_ms": 20000 }
    },
    "delivery": "binary"
  }' \
  --output page.pdf
// Node.js 18+ (built-in fetch)
const res = await fetch("https://api.dynamicdocumentapi.com/v1/pdf/from-url", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    url: "https://example.com/pricing",
    pdf: {
      paper: { size: "Letter" },
      wait:  { until: "networkidle", timeout_ms: 20000 },
    },
  }),
});

const render = await res.json();
console.log(render.files[0].url); // signed URL, valid for 1 hour
import os
import requests

res = requests.post(
    "https://api.dynamicdocumentapi.com/v1/pdf/from-url",
    headers={"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}"},
    json={
        "url": "https://example.com/pricing",
        "pdf": {
            "paper": {"size": "Letter"},
            "wait":  {"until": "networkidle", "timeout_ms": 20000},
        },
        "delivery": "binary",
    },
    timeout=60,
)
res.raise_for_status()

with open("page.pdf", "wb") as f:
    f.write(res.content)
<?php
$payload = [
    'url' => 'https://example.com/pricing',
    'pdf' => [
        'paper' => ['size' => 'Letter'],
        'wait'  => ['until' => 'networkidle', 'timeout_ms' => 20000],
    ],
];

$ch = curl_init('https://api.dynamicdocumentapi.com/v1/pdf/from-url');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('DYNAMIC_DOCUMENT_API_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$render = json_decode(curl_exec($ch), true);
echo $render['files'][0]['url'];

Die Seite im richtigen Moment erfassen

Die meisten missratenen URL-zu-PDF-Ergebnisse haben eine Ursache: Die Aufnahme kam zu früh. Diagramme sind noch leer, Bilder graue Kästen, und der Text steht in einer Ersatzschrift. Die Engine wartet immer auf das load-Ereignis, dann auf Webfonts, die Bilddekodierung und zwei gerenderte Frames. Für alles, was später lädt, bestimmen Sie, was „fertig" heißt.

Auf JavaScript und nachgeladene Inhalte warten

networkidle wartet, bis 500 ms lang keine Anfrage offen war. selector wartet auf ein Element, zum Beispiel einen Diagramm-Container, der ein Attribut data-ready bekommt. Mit ready_flag sagt das Skript der Seite selbst, wann es fertig ist, und delay fügt eine feste Pause ein.

"wait": { "until": "selector",
  "selector": ".dashboard[data-ready]",
  "timeout_ms": 30000, "strict": false }

Mit strict: false liefert eine Zeitüberschreitung trotzdem das PDF, plus eine Warnung wait_timeout; mit true scheitert das Rendering stattdessen.

Seiten hinter einem Login

Übergeben Sie, woran die Seite eine angemeldete Person erkennt: bis zu 50 cookies, bis zu 50 headers wie ein Bearer-Token, basic_auth oder einen eigenen user_agent.

Zugangsdaten gehen nur an dieselbe registrierbare Domain wie die URL, Cookies anderer Domains werden verworfen, und Geheimnisse werden in Protokollen geschwärzt. Interaktive Login-Formulare und OAuth-Abläufe werden nicht unterstützt: Erzeugen Sie zuerst eine Sitzung oder ein Token und übergeben Sie es dann.

Cookie-Banner

Ein Einwilligungsbanner, das die halbe erste Seite verdeckt, ist die zweithäufigste Beschwerde. Die verlässliche Lösung: das Cookie mitsenden, das die Seite speichert, nachdem jemand auf „Akzeptieren" geklickt hat. Öffnen Sie die Seite in Ihrem Browser, akzeptieren Sie, kopieren Sie das Einwilligungs-Cookie und übergeben Sie es in http.cookies. Das Banner erscheint dann gar nicht erst.

"http": { "cookies": [
  { "name": "cookie_consent", "value": "accepted",
    "domain": "example.com" } ] }

Print-CSS oder Bildschirm-CSS

Standardmäßig wird die Seite mit dem Medium print gerendert, damit das Druck-Stylesheet einer Seite greift: Navigation ausgeblendet, Links ausgeschrieben, Farben angepasst. Viele Seiten haben aber gar keine richtigen Druckstile. Wirkt das Ergebnis zu nackt, setzen Sie emulate_media auf screen und bekommen das Layout, das Besucher sehen.

In eine URL-Erfassung lassen sich weder eigenes CSS noch Skripte einfügen. So bleibt eine fremde Seite genau so, wie ihr Betreiber sie gebaut hat; wenn Sie das Layout ändern müssen, holen Sie das HTML und nutzen Sie stattdessen den HTML-zu-PDF-Endpunkt.

Mit Seitenumbrüchen oder als eine lange Seite

Eine Webseite hat keine Seiten, ein PDF schon. Sie bestimmen, wie geteilt wird:

  • Standardpapier. Eine von 13 benannten Größen, von A0 bis A6, B4, B5, Letter, Legal, Tabloid und Ledger, hoch oder quer, mit eigenen Rändern und scale von 0,1 bis 2,0.
  • Eigene Größe. Beliebige width und height von 0,1 bis 200 Zoll, etwa eine 1280 px breite Seite passend zu einem Desktop-Layout.
  • Eine durchgehende Seite. single_page: true macht das PDF genau so hoch wie den Inhalt. Kein Seitenumbruch schneidet durch ein Diagramm oder eine Tabellenzeile.
  • Nur bestimmte Seiten. page_ranges wie "1-2" liefert nur den ersten Teil einer sehr langen Seite.

Wofür Teams URL to PDF nutzen

  • Dashboard-Exporte. Ihre App rendert das Dashboard schon. Erfassen Sie seine URL mit einem Sitzungs-Cookie und verschicken Sie das PDF als Wochenbericht, statt jedes Diagramm in einer eigenen Vorlage nachzubauen.
  • Compliance-Momentaufnahmen. Den Stand einer AGB-Seite, einer Preisliste oder einer veröffentlichten Anzeige zu einem bestimmten Zeitpunkt sichern, mit der Aufnahmezeit in Ihren eigenen Unterlagen.
  • Web-Rechnungen und Bestellseiten. Wenn Rechnungen schon als Seiten in Ihrem Kundenportal existieren, ist die PDF-Kopie eine Anfrage entfernt.
  • Inhalte zum Herunterladen. Bieten Sie Artikel, Dokumentation oder Berichte neben der Webfassung auch als PDF an.

Die URL-Erfassung ist einer von vier Eingängen unserer PDF-Generierungs-API: Dieselbe Engine rendert auch rohes HTML, Markdown und gespeicherte Vorlagen.

URL to PDF oder HTML to PDF: was passt?

Beide laufen auf derselben Chromium-Engine. Der Unterschied ist, wer die Seite kontrolliert.

Wann URL to PDF und wann HTML to PDF
Kriterium URL to PDF HTML to PDF
Die Seite existiert schon onlineBeste WahlSie müssten ihr HTML holen und senden
Sie müssen das Layout ändernNicht möglich, kein CSS einfügbarVolle Kontrolle über HTML, CSS und Skripte
Seite hinter einem LoginCookies, Header oder Basic AuthKein Login nötig, Sie senden den Inhalt
Relative Links auf Bilder und SchriftenWerden gegen die URL aufgelöstAbsolute URLs verwenden
Hängt von der Zielseite abJa: Geschwindigkeit, Verfügbarkeit und ÄnderungenNein

Faustregel: Erfassen Sie eine URL, wenn die Seite die maßgebliche Quelle ist, und senden Sie stattdessen rohes HTML, wenn Sie den Inhalt selbst erzeugen oder ein Drucklayout brauchen, das von der Website abweicht.

Preise der URL to PDF API

Kostenlos starten, dann einen festen Monatspreis für ein festes PDF-Volumen zahlen.

Free

€0

50 Renderings pro Monat, volle REST-API. Zum Testen und für Prototypen.

Starter

€15 / Monat

3.000 Renderings pro Monat, jährlich abgerechnet (19 € bei monatlicher Abrechnung). Etwa 0,005 € pro Rendering.

Größere Volumen gibt es in den Tarifen Growth, Pro und Scale. Vergleichen Sie sie in den vollständigen Preisen.

FAQ

URL to PDF API: häufige Fragen

Kann sie Seiten umwandeln, die einen Login verlangen?

Ja, solange die Seite ein Sitzungs-Cookie, einen Header wie ein Bearer-Token oder HTTP Basic Auth akzeptiert. Senden Sie sie in http.cookies, http.headers oder http.basic_auth. Sie gehen nur an dieselbe Website wie die URL. Ein interaktives Login-Formular oder ein OAuth-Ablauf kann nicht für Sie ausgefüllt werden.

Wartet sie, bis JavaScript fertig ist?

Ja. JavaScript läuft standardmäßig, und die Engine wartet immer auf das load-Ereignis, Webfonts, die Bilddekodierung und zwei gerenderte Frames. Für Seiten, die danach weiterladen, setzen Sie pdf.wait.until auf networkidle, einen CSS-selector, ein ready_flag oder eine feste delay.

Wie entferne ich Cookie-Banner aus dem PDF?

Senden Sie das Einwilligungs-Cookie, das die Seite setzt, nachdem jemand zugestimmt hat, in http.cookies. Das Banner erscheint dann nicht. In eine URL-Erfassung lässt sich kein eigenes CSS einfügen, das Banner per Stilregel auszublenden ist also nicht möglich; wenn Sie die Seite umgestalten müssen, holen Sie ihr HTML selbst und nutzen Sie den HTML-zu-PDF-Endpunkt.

Kann ich eine durchgehende Seite statt A4- oder Letter-Seiten bekommen?

Ja. Setzen Sie pdf.single_page auf true, und das PDF wird eine Seite, so hoch wie der Inhalt. Das hilft bei langen Landingpages, Belegen und Archiven, wo Seitenumbrüche durch Inhalte schneiden würden.

Welche Grenzen gelten für Zeitlimit und Seitengröße?

Das Warte-Zeitlimit beträgt standardmäßig 30 Sekunden und lässt sich von 100 Millisekunden bis 300 Sekunden einstellen. Das Papier kann eine von 13 benannten Größen sein oder jede eigene Größe von 0,1 bis 200 Zoll je Seite.

Kann ich jede öffentliche Website umwandeln?

Technisch jede Seite, die im öffentlichen Internet erreichbar ist. Adressen in privaten oder internen Netzen sind gesperrt. Sie sind dafür verantwortlich, dass Sie die erfassten Inhalte speichern oder weitergeben dürfen.

Wandeln Sie Ihre erste URL kostenlos um

50 Renderings im Monat im Free-Tarif, ohne Kreditkarte, automatisches Nachladen in Bezahltarifen, kein Browser zu betreiben.

Kostenlos starten