Génération de rapports PDF en Swift pour iOS et macOS avec PDFKit et Core Graphics

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 rapports PDF en Swift pour iOS et macOS



La création de documents PDF est une tâche courante dans les applications mobiles et de bureau. Sur les plateformes Apple (iOS, macOS), des outils intégrés puissants sont disponibles : PDFKit et Core Graphics. Dans cet article, nous verrons comment générer un rapport multipage avec des tableaux, du texte et des graphiques, en utilisant uniquement du Swift natif.



Pourquoi utiliser les outils intégrés ?

  • Aucune dépendance externe — tout est déjà inclus dans le SDK.
  • Contrôle total du rendu — travail avec les coordonnées, les polices, les couleurs.
  • Multiplateforme — le code fonctionne à la fois sur iOS et macOS.
  • Haute performance — Core Graphics utilise l'accélération matérielle.


Approches principales

Il existe deux méthodes principales pour générer des PDF en Swift :

  1. PDFKit — API de haut niveau pour travailler avec les PDF (lecture, édition, création).
  2. Core Graphics — rendu de bas niveau via le contexte PDF.

Nous aborderons la deuxième approche, car elle offre une flexibilité maximale pour créer des rapports « à partir de zéro ».



Création du contexte PDF

La première étape consiste à créer un contexte PDF dans lequel nous allons dessiner les éléments. Pour cela, on utilise la fonction UIGraphicsBeginPDFContextToFile (iOS) ou son équivalent pour macOS.



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) // Ici, nous allons dessiner les pages UIGraphicsEndPDFContext() return pdfURL}


Ajout de pages et de contenu

Chaque page commence par un appel à UIGraphicsBeginPDFPage(). Ensuite, vous pouvez utiliser les méthodes standard d'UIKit pour dessiner.



func drawReport() {    guard let pdfURL = generatePDF() else { return }        UIGraphicsBeginPDFContextToFile(pdfURL.path, CGRect(x: 0, y: 0, width: 612, height: 792), nil)        // Première page    UIGraphicsBeginPDFPage()    drawHeader(title: "Rapport mensuel")    drawTable(data: sampleData)        // Deuxième page (si nécessaire)    UIGraphicsBeginPDFPage()    drawChart()        UIGraphicsEndPDFContext()}


Dessiner du texte et des titres

Pour dessiner du texte, nous utilisons NSString avec des attributs.



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)}


Création d'un tableau simple

Un tableau peut être dessiné à l'aide de lignes et de texte. Voici un exemple de génération d'un tableau à deux colonnes.



func drawTable(data: [(String, String)]) {    let startX: CGFloat = 50    var startY: CGFloat = 100    let colWidth: CGFloat = 250    let rowHeight: CGFloat = 30        // Dessiner les en-têtes    let headerAttributes: [NSAttributedString.Key: Any] = [        .font: UIFont.boldSystemFont(ofSize: 14),        .foregroundColor: UIColor.black    ]    "Nom".draw(at: CGPoint(x: startX, y: startY), withAttributes: headerAttributes)    "Valeur".draw(at: CGPoint(x: startX + colWidth, y: startY), withAttributes: headerAttributes)        startY += rowHeight        // Dessiner les lignes    for (key, value) in data {        let rowAtt                    

Recommendations