Génération de PDF en Swift (iOS/macOS) : guide complet
La création de documents PDF est l'une des tâches clés lors du développement d'applications pour iOS et macOS. Rapports, factures, certificats, livres électroniques : tout cela nécessite un outil fiable et flexible pour générer des PDF. Dans l'écosystème Swift, il existe plusieurs approches : des frameworks intégrés d'Apple aux bibliothèques tierces aux fonctionnalités avancées. Dans cet article, nous allons passer en revue les principales méthodes de génération de PDF, leurs avantages et inconvénients, et fournir des exemples de code fonctionnels.
1. PDFKit — le framework intégré d'Apple
PDFKit est un framework puissant d'Apple, disponible sur iOS 11+ et macOS 10.13+. Il fournit une API de haut niveau pour créer, afficher et éditer des documents PDF. Principales fonctionnalités :
- Création de PDF à partir de UIView, UIImage ou de texte
- Ajout d'annotations, de formulaires et de liens hypertextes
- Gestion de documents multipages
- Prise en charge de Core Graphics pour le rendu personnalisé
Exemple de création d'un PDF à partir d'un UIView :
import PDFKit
func generatePDF(from view: UIView) -> Data? { let pdfData = NSMutableData() UIGraphicsBeginPDFContextToData(pdfData, view.bounds, nil) UIGraphicsBeginPDFPage() guard let context = UIGraphicsGetCurrentContext() else { return nil } view.layer.render(in: context) UIGraphicsEndPDFContext() return pdfData as Data}Cette méthode convient si vous avez besoin de « photographier » rapidement une interface existante. Cependant, pour une mise en page complexe (tableaux, en-têtes et pieds de page, polices personnalisées), il est préférable d'utiliser Core Graphics directement.
2. Core Graphics (Quartz 2D) — une solution de bas niveau
Core Graphics vous donne un contrôle total sur le processus de rendu. Vous travaillez avec le contexte PDF, dessinez des lignes, du texte, des images, gérez les pages. C'est la méthode la plus flexible, mais aussi la plus laborieuse.
Exemple de création d'un PDF simple avec du texte :
import UIKit
func createPDFWithText() -> Data? { let pageSize = CGRect(x: 0, y: 0, width: 612, height: 792) // A4 let data = NSMutableData() UIGraphicsBeginPDFContextToData(data, pageSize, nil) UIGraphicsBeginPDFPage() guard let context = UIGraphicsGetCurrentContext() else { return nil } 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: 50), withAttributes: attributes) UIGraphicsEndPDFContext() return data as Data}Pour les documents complexes (tableaux, images, numérotation des pages), vous devrez écrire beaucoup de code auxiliaire. En contrepartie, vous obtenez des performances maximales et une taille de fichier minimale.
3. TPPDF — une bibliothèque tierce open source
TPPDF (GitHub : techprimate/TPPDF) est une bibliothèque Swift pour la génération de PDF avec une syntaxe déclarative. Elle prend en charge :
- Texte, images, tableaux, listes
- En-têtes et pieds de page, numérotation des pages
- Répartition automatique du contenu entre les pages
- Polices, couleurs et bordures personnalisées
Installation via Swift Package Manager :
// Package.swiftdependencies: [ .package(url: "https://github.com/techprimate/TPPDF.git", from: "2.0.0")]Exemple de création d'un document avec un tableau :
import TPPDF
func generateInvoice() -> Data? { let document = PDFDocument(format: .a4) // Ajout d'un titre document.add(text: "Facture n°123", style: PDFTextStyle.heading1) // Création d'un tableau let table = PDFTable(rows: 3, columns: 2) table[0][0].content = "Produit" table[0][1].content = "Prix" table[1][ Aussi dans la bibliothèque
Travailler avec YAML en Rust : la bibliothèque serde_yaml
Apprentissage automatique en C# (.NET) : aperçu des bibliothèques et outils
DomPDF pour PHP : guide complet avec exemples
Frameworks CLI pour Kotlin : Clikt, kotlinx-cli, picocli — aperçu et comparaison
Envoi d'email en JavaScript (Node.js) : Nodemailer, SendGrid, Mailgun