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
- 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][
También en la biblioteca
Recommendations