Génération de PDF en Swift : création de documents pour iOS et macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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

Recommendations