PDF-Generierung in Swift (iOS/macOS): vollständige Anleitung
Die Erstellung von PDF-Dokumenten ist eine häufige Aufgabe in iOS- und macOS-Apps: von der Erstellung von Berichten und Rechnungen bis zum Datenexport und der Erstellung von E-Books. In Swift gibt es dafür mehrere integrierte und externe Werkzeuge. In diesem Artikel werden wir die wichtigsten Ansätze zur PDF-Generierung auf Apple-Plattformen, ihre Möglichkeiten und Anwendungsbeispiele im Detail besprechen.
Integrierte Apple-Frameworks
Das Apple-Ökosystem bietet leistungsstarke Werkzeuge für die Arbeit mit PDF ohne externe Abhängigkeiten. Die wichtigsten sind:
- UIGraphicsPDFRenderer (iOS 10+) – moderne API zur PDF-Erstellung in UIKit.
- PDFKit – Framework zum Anzeigen, Bearbeiten und Erstellen von PDF (verfügbar ab iOS 11+ und macOS 10.13+).
- Core Graphics (Quartz 2D) – Low-Level C-basierte API zum Zeichnen und Generieren von PDF.
1. UIGraphicsPDFRenderer – einfacher und schneller Einstieg
Dies ist die bequemste Methode für iOS. Sie ermöglicht die Erstellung mehrseitiger PDFs durch Zeichnen mit UIKit (UIView, UIImage, Text usw.).
import UIKit
func generatePDF() -> Data? { let pageSize = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4 let renderer = UIGraphicsPDFRenderer(bounds: pageSize)
let data = renderer.pdfData { context in context.beginPage()
// Text zeichnen let text = "Hallo, PDF-Welt!" let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 24), .foregroundColor: UIColor.black ] text.draw(at: CGPoint(x: 50, y: 100), withAttributes: attributes)
// Bild zeichnen if let image = UIImage(named: "logo") { image.draw(in: CGRect(x: 50, y: 200, width: 200, height: 100)) }
// Zweite Seite context.beginPage() let text2 = "Dies ist die zweite Seite" text2.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) }
return data}
// In Datei speichernif let pdfData = generatePDF() { let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let pdfURL = documentsPath.appendingPathComponent("document.pdf") try? pdfData.write(to: pdfURL) print("PDF gespeichert: \\(pdfURL)")}2. PDFKit – für fortgeschrittene Dokumentenarbeit
PDFKit bietet die Klassen PDFDocument und PDFPage. Es ist ideal für die Erstellung von PDFs aus formatiertem Text, Tabellen und Bildern. Es unterstützt die Arbeit mit Anmerkungen, Lesezeichen und Formularen.
import PDFKit
func createPDFWithPDFKit() -> PDFDocument { let document = PDFDocument()
// Seite über NSAttributedString erstellen let pageRect = CGRect(x: 0, y: 0, width: 612, height: 792) // US Letter let text = NSAttributedString(string: "Beispiel PDF mit PDFKitZweite Zeile") let page = PDFPage()
// Rendering in den Seitenkontext let renderer = UIGraphicsImageRenderer(bounds: pageRect) let image = renderer.image { ctx in text.draw(at: CGPoint(x: 72, y: 72)) }
// Seite aus Bild erstellen (vereinfacht) // Verwenden Sie in einem echten Projekt PDFPage mit drawBlock let finalPage = PDFPage(image: image) ?? PDFPage() document.insert(finalPage, at: 0)
return document}
// Speichernif let document = createPDFWithPDFKit() as? PDFDocument { let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("pdfkit_example.pdf") document.write(to: url)}Wichtig: PDFKit ist nur ab iOS 11+/macOS 10.13+ verfügbar. Für ältere Versionen verwenden Sie UIGraphicsPDFRenderer.
3. Core Graphics (Quartz 2D) – maximale Kontrolle
Wenn Sie
Auch in der Bibliothek
Juniper: Erstellung effizienter GraphQL-APIs in Rust
Caching in C++: Redis, memcached, LevelDB und andere Tools
WebSocket in Rust: Bibliotheken tokio-tungstenite und tungstenite