Generación de PDF en Swift: creación de documentos para iOS y macOS

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 frecuentes en aplicaciones iOS y macOS: desde la generación de informes y facturas hasta la exportación de datos y la creación de libros electrónicos. En Swift, existen varias herramientas integradas y de terceros para ello. En este artículo, analizaremos en detalle los principales enfoques para la generación de PDF en las plataformas Apple, sus capacidades y ejemplos de uso.



Frameworks integrados de Apple



El ecosistema de Apple proporciona potentes herramientas para trabajar con PDF sin dependencias externas. Las principales son:



  • UIGraphicsPDFRenderer (iOS 10+) — API moderna para crear PDF en UIKit.
  • PDFKit — framework para visualizar, editar y crear PDF (disponible en iOS 11+ y macOS 10.13+).
  • Core Graphics (Quartz 2D) — API de bajo nivel basada en C para dibujar y generar PDF.


1. UIGraphicsPDFRenderer — inicio simple y rápido



Esta es la forma más conveniente para iOS. Permite crear PDF de varias páginas dibujando con UIKit (UIView, UIImage, texto, 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()

// Dibujamos texto 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: 100), withAttributes: attributes)

// Dibujamos imagen if let image = UIImage(named: "logo") { image.draw(in: CGRect(x: 50, y: 200, width: 200, height: 100)) }

// Segunda página context.beginPage() let text2 = "Esta es la segunda página" text2.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) }

return data}

// Guardar en archivoif 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 guardado: \\(pdfURL)")}


2. PDFKit — para trabajo avanzado con documentos



PDFKit proporciona las clases PDFDocument y PDFPage. Es ideal para crear PDF a partir de texto con formato, tablas e imágenes. Soporta anotaciones, marcadores y formularios.



import PDFKit

func createPDFWithPDFKit() -> PDFDocument { let document = PDFDocument()

// Creamos una página mediante NSAttributedString let pageRect = CGRect(x: 0, y: 0, width: 612, height: 792) // US Letter let text = NSAttributedString(string: "Ejemplo de PDF con PDFKitSegunda línea") let page = PDFPage()

// Renderizado en el contexto de la página let renderer = UIGraphicsImageRenderer(bounds: pageRect) let image = renderer.image { ctx in text.draw(at: CGPoint(x: 72, y: 72)) }

// Creamos la página a partir de la imagen (simplificado) // En un proyecto real, use PDFPage con drawBlock let finalPage = PDFPage(image: image) ?? PDFPage() document.insert(finalPage, at: 0)

return document}

// Guardarif let document = createPDFWithPDFKit() as? PDFDocument { let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("pdfkit_example.pdf") document.write(to: url)}


Importante: PDFKit solo está disponible en iOS 11+/macOS 10.13+. Para versiones anteriores, use UIGraphicsPDFRenderer.



3. Core Graphics (Quartz 2D) — control máximo



Si su

Recommendations