Geração de PDF em Swift: criação de documentos para iOS e macOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geração de PDF em Swift (iOS/macOS): guia completo



Criar documentos PDF é uma tarefa comum em aplicativos iOS e macOS: desde a geração de relatórios e faturas até a exportação de dados e criação de livros eletrônicos. Em Swift, existem várias ferramentas nativas e de terceiros para isso. Neste artigo, vamos detalhar as principais abordagens para geração de PDF nas plataformas Apple, suas capacidades e exemplos de uso.



Frameworks nativos da Apple



O ecossistema Apple oferece ferramentas poderosas para trabalhar com PDF sem dependências externas. As principais são:



  • UIGraphicsPDFRenderer (iOS 10+) — API moderna para criar PDF no UIKit.
  • PDFKit — framework para exibir, editar e criar PDF (disponível no iOS 11+ e macOS 10.13+).
  • Core Graphics (Quartz 2D) — API de baixo nível baseada em C para desenho e geração de PDF.


1. UIGraphicsPDFRenderer — simples e rápido para começar



Esta é a maneira mais conveniente para iOS. Permite criar PDFs com várias páginas, desenhando usando 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()

// Desenha texto let text = "Olá, 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)

// Desenha imagem 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 é a segunda página" text2.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) }

return data}

// Salvar em arquivoif 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 salvo: \\(pdfURL)")}


2. PDFKit — para trabalho avançado com documentos



O PDFKit fornece as classes PDFDocument e PDFPage. É ideal para criar PDFs a partir de texto formatado, tabelas e imagens. Suporta anotações, marcadores e formulários.



import PDFKit

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

// Cria página via NSAttributedString let pageRect = CGRect(x: 0, y: 0, width: 612, height: 792) // US Letter let text = NSAttributedString(string: "Exemplo de PDF com PDFKitSegunda linha") let page = PDFPage()

// Renderização no contexto da página let renderer = UIGraphicsImageRenderer(bounds: pageRect) let image = renderer.image { ctx in text.draw(at: CGPoint(x: 72, y: 72)) }

// Cria página a partir da imagem (simplificado) // Em um projeto real, use PDFPage com drawBlock let finalPage = PDFPage(image: image) ?? PDFPage() document.insert(finalPage, at: 0)

return document}

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


Importante: O PDFKit está disponível apenas no iOS 11+/macOS 10.13+. Para versões mais antigas, use UIGraphicsPDFRenderer.



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



Se vo

Recommendations