Génération de PDF en Swift (iOS/macOS) : guide complet
La création de documents PDF est l'une des tâches courantes dans les applications iOS et macOS : de la génération de rapports et de factures à l'exportation de données et à la création de livres électroniques. En Swift, il existe plusieurs outils intégrés et tiers pour cela. Dans cet article, nous allons détailler les principales approches de génération de PDF sur les plateformes Apple, leurs possibilités et des exemples d'utilisation.
Frameworks intégrés d'Apple
L'écosystème Apple fournit des outils puissants pour travailler avec les PDF sans dépendances tierces. Les principaux sont :
- UIGraphicsPDFRenderer (iOS 10+) — API moderne pour créer des PDF dans UIKit.
- PDFKit — framework pour afficher, éditer et créer des PDF (disponible sur iOS 11+ et macOS 10.13+).
- Core Graphics (Quartz 2D) — API bas niveau en C pour le dessin et la génération de PDF.
1. UIGraphicsPDFRenderer — simple et rapide pour démarrer
C'est la méthode la plus pratique pour iOS. Elle permet de créer un PDF multipage en dessinant avec UIKit (UIView, UIImage, texte, etc.).
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()
// Dessiner du texte let text = "Bonjour, monde PDF !" let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 24), .foregroundColor: UIColor.black ] text.draw(at: CGPoint(x: 50, y: 100), withAttributes: attributes)
// Dessiner une image if let image = UIImage(named: "logo") { image.draw(in: CGRect(x: 50, y: 200, width: 200, height: 100)) }
// Deuxième page context.beginPage() let text2 = "Ceci est la deuxième page" text2.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) }
return data}
// Sauvegarde dans un fichierif 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 sauvegardé : \\(pdfURL)")}2. PDFKit — pour un travail avancé avec les documents
PDFKit fournit les classes PDFDocument et PDFPage. Il est idéal pour créer des PDF à partir de texte formaté, de tableaux et d'images. Il prend en charge les annotations, les signets et les formulaires.
import PDFKit
func createPDFWithPDFKit() -> PDFDocument { let document = PDFDocument()
// Créer une page via NSAttributedString let pageRect = CGRect(x: 0, y: 0, width: 612, height: 792) // US Letter let text = NSAttributedString(string: "Exemple de PDF avec PDFKitDeuxième ligne") let page = PDFPage()
// Rendu dans le contexte de la page let renderer = UIGraphicsImageRenderer(bounds: pageRect) let image = renderer.image { ctx in text.draw(at: CGPoint(x: 72, y: 72)) }
// Créer une page à partir de l'image (simplifié) // Dans un projet réel, utilisez PDFPage avec drawBlock let finalPage = PDFPage(image: image) ?? PDFPage() document.insert(finalPage, at: 0)
return document}
// Sauvegardeif let document = createPDFWithPDFKit() as? PDFDocument { let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("pdfkit_example.pdf") document.write(to: url)}Important : PDFKit est disponible uniquement sur iOS 11+/macOS 10.13+. Pour les versions plus anciennes, utilisez UIGraphicsPDFRenderer.
3. Core Graphics (Quartz 2D) — contrôle maximal
Si vo
Aussi dans la bibliothèque
Journalisation en JavaScript (Node.js) : les meilleures solutions pour votre projet
Envoi de SMS en Java : aperçu des bibliothèques API (Twilio, Nexmo, passerelles SMS)
Génération de rapports PDF en C# (.NET) : iTextSharp, QuestPDF, PDFsharp
ORM pour C++ : comparaison et exemples d'utilisation (ODB, SOCI, SQLiteCpp)