Generación de PDF en Swift (iOS/macOS): resumen de herramientas y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Generación de PDF en Swift (iOS/macOS): guía completa



La creación de documentos PDF es una de las tareas clave al desarrollar aplicaciones para iOS y macOS. Informes, facturas, certificados, libros electrónicos: todo esto requiere una herramienta fiable y flexible para generar PDF. En el ecosistema Swift existen varios enfoques: desde los frameworks integrados de Apple hasta bibliotecas de terceros con capacidades avanzadas. En este artículo analizaremos las principales formas de generar PDF, sus ventajas y desventajas, y proporcionaremos ejemplos de código funcionales.



1. PDFKit — framework integrado de Apple



PDFKit es un potente framework de Apple, disponible en iOS 11+ y macOS 10.13+. Proporciona una API de alto nivel para crear, visualizar y editar documentos PDF. Las principales capacidades son:

  • Creación de PDF a partir de UIView, UIImage o texto
  • Adición de anotaciones, formularios y enlaces
  • Trabajo con documentos de varias páginas
  • Soporte de Core Graphics para dibujo personalizado


Ejemplo de creación de PDF a partir de 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}


Este método es adecuado si necesita "fotografiar" rápidamente una interfaz existente. Sin embargo, para maquetaciones complejas (tablas, encabezados y pies de página, fuentes personalizadas) es mejor usar Core Graphics directamente.



2. Core Graphics (Quartz 2D) — solución de bajo nivel



Core Graphics le da control total sobre el proceso de dibujo. Trabaja con el contexto PDF, dibuja líneas, texto, imágenes y gestiona páginas. Es la forma más flexible, pero también la más laboriosa.



Ejemplo de creación de un PDF simple con texto:

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 = "¡Hola, mundo 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}


Para documentos complejos (tablas, imágenes, numeración de páginas) tendrá que escribir mucho código auxiliar. Pero a cambio obtiene el máximo rendimiento y el tamaño de archivo más pequeño.



3. TPPDF — biblioteca de terceros de código abierto



TPPDF (GitHub: techprimate/TPPDF) es una biblioteca Swift para generar PDF con sintaxis declarativa. Soporta:

  • Texto, imágenes, tablas, listas
  • Encabezados y pies de página, numeración de páginas
  • Salto automático de contenido entre páginas
  • Fuentes, colores y bordes personalizados


Instalación a través de Swift Package Manager:

// Package.swiftdependencies: [    .package(url: "https://github.com/techprimate/TPPDF.git", from: "2.0.0")]


Ejemplo de creación de un documento con tabla:

import TPPDF

func generateInvoice() -> Data? { let document = PDFDocument(format: .a4) // Añadimos un título document.add(text: "Factura Nº123", style: PDFTextStyle.heading1) // Creamos una tabla let table = PDFTable(rows: 3, columns: 2) table[0][0].content = "Producto" table[0][1].content = "Precio" table[1][

Recommendations