Generierung von PDF-Berichten in Swift für iOS und macOS mit PDFKit und Core Graphics

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Generierung von PDF-Berichten in Swift für iOS und macOS



Die Erstellung von PDF-Dokumenten ist eine häufige Aufgabe in mobilen und Desktop-Anwendungen. Auf den Apple-Plattformen (iOS, macOS) stehen dafür leistungsstarke integrierte Werkzeuge zur Verfügung: PDFKit und Core Graphics. In diesem Artikel werden wir erläutern, wie Sie einen mehrseitigen Bericht mit Tabellen, Text und Grafiken erstellen, der nur natives Swift verwendet.



Warum sollten Sie integrierte Werkzeuge verwenden?

  • Keine externen Abhängigkeiten erforderlich — alles ist bereits im SDK enthalten.
  • Volle Kontrolle über das Rendering — Arbeit mit Koordinaten, Schriftarten und Farben.
  • Plattformübergreifend — der Code funktioniert sowohl auf iOS als auch auf macOS.
  • Hohe Leistung — Core Graphics nutzt Hardwarebeschleunigung.


Grundlegende Ansätze

Es gibt zwei Hauptmethoden zur PDF-Generierung in Swift:

  1. PDFKit — eine High-Level-API für die Arbeit mit PDF (Lesen, Bearbeiten, Erstellen).
  2. Core Graphics — Low-Level-Rendering über den PDF-Kontext.

Wir werden den zweiten Ansatz betrachten, da er maximale Flexibilität bei der Erstellung von Berichten „von Grund auf“ bietet.



Erstellen eines PDF-Kontexts

Der erste Schritt besteht darin, einen PDF-Kontext zu erstellen, in den wir Elemente zeichnen. Dazu wird die Funktion UIGraphicsBeginPDFContextToFile (iOS) oder ihr Analogon für macOS verwendet.



import UIKit

func generatePDF() -> URL? { let fileName = "Report.pdf" let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) guard let documentsURL = paths.first else { return nil } let pdfURL = documentsURL.appendingPathComponent(fileName) let pageSize = CGRect(x: 0, y: 0, width: 612, height: 792) // A4 UIGraphicsBeginPDFContextToFile(pdfURL.path, pageSize, nil) // Hier werden wir die Seiten zeichnen UIGraphicsEndPDFContext() return pdfURL}


Hinzufügen von Seiten und Inhalten

Jede Seite beginnt mit einem Aufruf von UIGraphicsBeginPDFPage(). Danach können die Standardmethoden von UIKit zum Zeichnen verwendet werden.



func drawReport() {    guard let pdfURL = generatePDF() else { return }        UIGraphicsBeginPDFContextToFile(pdfURL.path, CGRect(x: 0, y: 0, width: 612, height: 792), nil)        // Erste Seite    UIGraphicsBeginPDFPage()    drawHeader(title: "Monatsbericht")    drawTable(data: sampleData)        // Zweite Seite (falls erforderlich)    UIGraphicsBeginPDFPage()    drawChart()        UIGraphicsEndPDFContext()}


Zeichnen von Text und Überschriften

Zum Zeichnen von Text verwenden wir NSString mit Attributen.



func drawHeader(title: String) {    let titleAttributes: [NSAttributedString.Key: Any] = [        .font: UIFont.boldSystemFont(ofSize: 24),        .foregroundColor: UIColor.darkGray    ]    title.draw(at: CGPoint(x: 50, y: 40), withAttributes: titleAttributes)}


Erstellen einer einfachen Tabelle

Eine Tabelle kann mit Linien und Text gezeichnet werden. Nachfolgend ein Beispiel für die Generierung einer Tabelle mit zwei Spalten.



func drawTable(data: [(String, String)]) {    let startX: CGFloat = 50    var startY: CGFloat = 100    let colWidth: CGFloat = 250    let rowHeight: CGFloat = 30        // Überschriften zeichnen    let headerAttributes: [NSAttributedString.Key: Any] = [        .font: UIFont.boldSystemFont(ofSize: 14),        .foregroundColor: UIColor.black    ]    "Name".draw(at: CGPoint(x: startX, y: startY), withAttributes: headerAttributes)    "Wert".draw(at: CGPoint(x: startX + colWidth, y: startY), withAttributes: headerAttributes)        startY += rowHeight        // Zeilen zeichnen    for (key, value) in data {        let rowAtt                    

Empfehlungen