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:
- PDFKit — eine High-Level-API für die Arbeit mit PDF (Lesen, Bearbeiten, Erstellen).
- 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 Auch in der Bibliothek
Überwachung von Swift-Apps: Bibliotheken und Tools für iOS/macOS
Resilience4j Java: vollständige Anleitung mit Codebeispielen
Java-Standardbibliothek (Java Standard Library)
Arbeiten mit Datumsangaben in PHP: Überblick über Bibliotheken und Werkzeuge
EasyNetQ für C# (.NET): Vollständiges Tutorial mit Beispielen