API-Dokumentation

Alles, was Sie zur Integration von WebPDF.app in Ihre Projekte benötigen.

Erste Schritte

WebPDF.app bietet eine einfache REST-API zur Konvertierung von HTML in PDF. Folgen Sie diesen Schritten, um in weniger als 5 Minuten zu starten.

1

Konto erstellen

Kostenlos registrieren um Zugang zum Dashboard zu erhalten.

2

API-Schlüssel generieren

Gehen Sie im Dashboard zu "API Keys" und erstellen Sie einen neuen Schlüssel.

3

Erste Anfrage stellen

Verwenden Sie Ihren API-Schlüssel, um Anfragen an den Endpunkt zu authentifizieren. /v1/generate.

Quick Start - cURL
curl -X POST https://api.webpdf.app/v1/generate \
  -H "Content-Type: application/json" \
  -d '{"apiKey": "YOUR_API_KEY", "url": "https://example.com"}' \
  --output document.pdf

Authentifizierung

Alle API-Anfragen müssen Ihren API-Schlüssel im JSON-Body enthalten.

API-Key Authentifizierung

Fügen Sie das Feld apiKey in Ihren JSON-Body ein.

Request-Header
{
  "apiKey": "wpdf_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "url": "https://example.com"
}

Endpunkt /generate

POST https://api.webpdf.app/v1/generate

Konvertiert eine Webseite oder HTML-Inhalt in ein PDF-Dokument.

Request-Body (JSON)

Parameter Typ Beschreibung
apiKey string API-Schlüssel zur Authentifizierung
url string URL der Webseite. Erforderlich, wenn html nicht angegeben ist.
html string Direkter HTML-Inhalt. Erforderlich, wenn url nicht angegeben ist.
format string Seitenformat: "Letter", "Legal", "A4" etc. (Standard: "A4")
landscape boolean Querformat: true für Querformat (Standard: false)
marginTop integer Oberer Rand in Pixeln (Standard: 0)
marginRight integer Rechter Rand in Pixeln (Standard: 0)
marginBottom integer Unterer Rand in Pixeln (Standard: 0)
marginLeft integer Linker Rand in Pixeln (Standard: 0)
width integer Benutzerdefinierte Breite in Pixeln (überschreibt format)
height integer Benutzerdefinierte Höhe in Pixeln (überschreibt format)
media string CSS-Medientyp: "screen" oder "print" (Standard: "screen")
Beispielanfrage
{
  "apiKey": "your-api-key-here",
  "url": "https://example.com",
  "format": "A4",
  "landscape": false,
  "marginTop": 10,
  "marginRight": 10,
  "marginBottom": 10,
  "marginLeft": 10,
  "media": "print"
}

Verfügbare Parameter

Die folgenden Parameter können im JSON-Body Ihrer POST-Anfrage gesendet werden.

Parameter docs.options.type Standard docs.options.description
format string "A4" Seitenformat (Letter, Legal, Tabloid, Ledger, A0-A6)
width string - Benutzerdefinierte Breite in Pixeln
height string - Benutzerdefinierte Höhe in Pixeln
landscape boolean false Querformat: true für Querformat
margin object 0 Ränder (marginTop, marginRight, marginBottom, marginLeft)
printBackground boolean true CSS-Medientyp: "screen" oder "print"
scale integer 1 Hinweis: Mindestens url oder html muss angegeben werden. Wenn beides angegeben ist, wird html verwendet.
displayHeaderFooter boolean false Header und Footer anzeigen
headerTemplate string - HTML-Vorlage für den Header
footerTemplate string - HTML-Vorlage für den Footer
pageRanges string - Seitenbereiche (z.B. "1-5, 8")
waitForSelector string - CSS-Selektor, auf den vor dem Rendern gewartet werden soll
waitForTimeout integer 0 Zusätzliche Wartezeit in Millisekunden

Code-Beispiele

Kopieren Sie diese Beispiele, um schnell in Ihrer bevorzugten Sprache zu starten.

// Node.js / JavaScript
const generatePdf = async () => {
  const response = await fetch('https://api.webpdf.app/v1/generate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      apiKey: process.env.WEBPDF_API_KEY,
      url: 'https://example.com',
      format: 'A4',
      landscape: false
    })
  });

  if (!response.ok) {
    const errorText = await response.text();
    throw new Error(`HTTP ${response.status}: ${errorText}`);
  }

  const pdfBuffer = await response.arrayBuffer();
  return Buffer.from(pdfBuffer);
};

// Usage
const pdf = await generatePdf();
fs.writeFileSync('output.pdf', pdf);
# Python
import requests
import os

def generate_pdf(url_to_convert):
    api_url = "https://api.webpdf.app/v1/generate"
    payload = {
        "apiKey": os.environ.get('WEBPDF_API_KEY'),
        "url": url_to_convert,
        "format": "A4",
        "landscape": False
    }
    headers = {"Content-Type": "application/json"}
    
    response = requests.post(api_url, json=payload, headers=headers)
    
    if response.status_code == 200:
        return response.content
    else:
        print(f"Errore: {response.status_code} - {response.text}")
        return None

# Usage
pdf_bytes = generate_pdf("https://example.com")
if pdf_bytes:
    with open("output.pdf", "wb") as f:
        f.write(pdf_bytes)
// PHP
<?php

function generatePdf($url) {
    $apiKey = getenv('WEBPDF_API_KEY');
    
    $data = [
        'apiKey' => $apiKey,
        'url' => $url,
        'format' => 'A4',
        'landscape' => false
    ];
    
    $ch = curl_init('https://api.webpdf.app/v1/generate');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/json'
        ]
    ]);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return $response;
}

// Usage
$pdf = generatePdf('https://example.com');
file_put_contents('output.pdf', $pdf);
// Java (with HttpClient)
import java.net.http.*;
import java.net.URI;

public class WebPdfClient {
    private static final String API_URL = "https://api.webpdf.app/v1/generate";
    private final String apiKey;
    
    public WebPdfClient(String apiKey) {
        this.apiKey = apiKey;
    }
    
    public byte[] generatePdf(String url) throws Exception {
        String json = String.format("{\"apiKey\":\"%s\",\"url\":\"%s\",\"format\":\"A4\"}", apiKey, url);
        
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(API_URL))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();
        
        HttpResponse response = client.send(
            request, HttpResponse.BodyHandlers.ofByteArray()
        );
        
        return response.body();
    }
}
// C# (.NET)
using System.Net.Http;
using System.Text;
using System.Text.Json;

public class WebPdfClient
{
    private readonly HttpClient _client;
    private readonly string _apiKey;
    private const string ApiUrl = "https://api.webpdf.app/v1/generate";

    public WebPdfClient(string apiKey)
    {
        _client = new HttpClient();
        _apiKey = apiKey;
    }

    public async Task<byte[]> GeneratePdfAsync(string url)
    {
        var payload = new {
            apiKey = _apiKey,
            url = url,
            format = "A4"
        };

        var json = JsonSerializer.Serialize(payload);
        var content = new StringContent(json, Encoding.UTF8, "application/json");

        var response = await _client.PostAsync(ApiUrl, content);
        response.EnsureSuccessStatusCode();

        return await response.Content.ReadAsByteArrayAsync();
    }
}
# cURL con URL
curl -X POST https://api.webpdf.app/v1/generate \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "test-key",
    "url": "https://example.com",
    "format": "A4",
    "landscape": false
  }' \
  --output document.pdf

# cURL con HTML diretto
curl -X POST https://api.webpdf.app/v1/generate \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "test-key",
    "html": "

Test

PDF generato da HTML.

", "format": "A4" }'
\ --output document.pdf

Fehlerbehandlung

Die API gibt Standard-HTTP-Codes und einen JSON-Body mit Fehlerdetails zurück.

Code Bedeutung Aktion
200 Erfolg PDF erfolgreich generiert
400 Bad Request Anfrageparameter prüfen
401 Nicht autorisiert API-Key fehlt oder ungültig
403 Verboten Unzureichendes Guthaben oder Konto gesperrt
429 Too Many Requests Rate Limit überschritten, später erneut versuchen
500 Serverfehler Interner Fehler, kontaktieren Sie uns bei Fortbestehen

Rate Limits

Um die Stabilität des Dienstes zu gewährleisten, wenden wir Anfrage-Limits pro API-Key an.

Plan-Limits

  • Kostenlos 60 req/min
  • Startup 300 req/min
  • Business 600 req/min
  • Enterprise Custom

Response-Header

  • X-RateLimit-Limit: Anfrage-Limit pro Zeitfenster
  • X-RateLimit-Remaining: Verbleibende Anfragen
  • X-RateLimit-Reset: Zeitstempel für Limit-Reset

Changelog

v3.0.0 - Januar 2024

Feature Update

  • Unterstützung für html-Parameter hinzugefügt
  • url-Parameter wird optional
  • Verbesserte Validierung
  • Abwärtskompatibilität gewahrt

v1.1.0 - Juni 2023

Initialer Release

  • Erster Endpunkt /v1/generate
  • HTML-zu-PDF-Konvertierung mit iText 7
  • Automatisches Abrufen von Web-Inhalten
  • HTML-Reinigung mit Jsoup
  • Unterstützung für bestehende PDFs

v1.0.0 - Jun 2023