Tobias Ludwig
Start
ServicesWeb, Apps, Backend und KIPlanerBausteine wählen, Preis sofort sehenBranchen-DemosBeispielseiten für Handwerk, Praxis, GastroReferenzenKundenprojekte mit ErgebnisMatch-CheckPasst das Vorhaben zu mir?Über michWer hinter der Seite steht
ProjekteEigene Software und Open SourceProdukteFertige Apps und WerkzeugeFlutterPlugins und PaketeBlogNotizen aus der Praxis
ToolsKleine Helfer im BrowserTech-WikiWerkzeuge und Stacks, kurz erklärtShowcaseDemos, Shader, Inszenierungen
Support & HilfeHilfe zu laufenden ProjektenMein KontoTickets und Zugänge
Erstgespräch
Erstgespräch buchenKostenloser Kennenlern-CallKontakt schreibenNachricht per Formular
$whoami
Tobias Ludwig
DevOps · Application Manager · Software Engineer
$ls /pages
tobias-ludwig/projekte/kontakt/kalender/impressum/datenschutz/
$git remote
github.com/nexas105
online·next.js 16·hono·postgresql
© 2026 tjl·stay curious_
Ambient OFF
Weiter so… ↓↓ ← → ← → B A
zurück zur Tech-Wiki
Tech-Wiki/Libraries
@

@react-pdf/renderer

PDF-Rendering aus React-Komponenten, serverseitig oder im Browser.

·diegomura·MIT
WebsiteDocsRepository

Übersicht

Was ist es?

@react-pdf/renderer rendert React-Komponenten zu PDFs — server-side (Node) oder client-side. Statt HTML-zu-PDF-Hack (Puppeteer) wird ein eigener Renderer benutzt, der direkt PDF-Primitives ausgibt.

Quickstart

pnpm add @react-pdf/renderer
import { Document, Page, Text, View, StyleSheet, pdf } from '@react-pdf/renderer'

const styles = StyleSheet.create({
  page: { padding: 40 },
  title: { fontSize: 24, fontWeight: 'bold' }
})

const MyDoc = () => (
  <Document>
    <Page size="A4" style={styles.page}>
      <Text style={styles.title}>Bewerbung</Text>
    </Page>
  </Document>
)

const blob = await pdf(<MyDoc />).toBlob()

Typische Patterns

  • StyleSheet.create statt inline — bessere Perf, Flexbox-Subset.
  • <Font.register> für Custom-Fonts (TTF/OTF mit Unicode-Range).
  • Server-side Render in Route Handler:
    // app/api/cv/route.ts
    const stream = await renderToStream(<MyDoc />)
    return new Response(stream as any, { headers: { 'Content-Type': 'application/pdf' } })
    
  • Dynamische Daten ganz normal als Props rein.
  • Mehrseitige Layouts via wrap und break-Props.

Gotchas / Was oft schiefgeht

  • Keine HTML/CSS-Parität — nur Subset von Flexbox, keine grid, keine Pseudo-Klassen, kein position: sticky.
  • Custom Fonts ohne Font.register → fallback auf Helvetica, oft fehlende Unicode-Glyphen (Umlaute!).
  • Images: lokale Pfade in Node funktionieren, im Browser braucht's Data-URLs oder Fetch.
  • Page break ist eigenwillig — wrap={false} auf Container nutzen, wenn nicht trennen.
  • SSR mit Streaming + Next.js: korrekte Headers + Response-Body-Type beachten, sonst korruptes PDF.

Wann nicht?

Wenn du bestehendes HTML/CSS als PDF brauchst → Puppeteer / Playwright (Headless-Chrome). Für reine Daten-Tabellen → pdfkit direkt, weniger Overhead.

Eingesetzt in

Projekte(1)

  • DBFV NRW Verbandsplattform

Referenzen(3)

  • DBFV NRW Verbandsplattform
  • frank-klingebiel.de
  • alexander-mittag.de

Kategorie

Libraries

Tags

pdfreact

Aliase

react-pdf · @react-pdf

Slug

react-pdf