Geração de PDF em Swift (iOS/macOS): guia completo
Criar documentos PDF é uma das tarefas essenciais no desenvolvimento de aplicativos para iOS e macOS. Relatórios, faturas, certificados, livros eletrônicos — tudo isso requer uma ferramenta confiável e flexível para gerar PDF. No ecossistema Swift, existem várias abordagens: desde frameworks nativos da Apple até bibliotecas de terceiros com recursos avançados. Neste artigo, vamos explorar as principais formas de gerar PDF, suas vantagens e desvantagens, além de fornecer exemplos práticos de código.
1. PDFKit — framework nativo da Apple
PDFKit é um poderoso framework da Apple, disponível no iOS 11+ e macOS 10.13+. Ele oferece uma API de alto nível para criar, exibir e editar documentos PDF. Principais recursos:
- Criação de PDF a partir de UIView, UIImage ou texto
- Adição de anotações, formulários e hiperlinks
- Trabalho com documentos de várias páginas
- Suporte a Core Graphics para renderização personalizada
Exemplo de criação 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 é adequado se você precisar "fotografar" rapidamente uma interface existente. No entanto, para layouts complexos (tabelas, cabeçalhos e rodapés, fontes personalizadas), é melhor usar Core Graphics diretamente.
2. Core Graphics (Quartz 2D) — solução de baixo nível
Core Graphics oferece controle total sobre o processo de renderização. Você trabalha com o contexto PDF, desenha linhas, texto, imagens e gerencia páginas. Esta é a abordagem mais flexível, mas também a mais trabalhosa.
Exemplo de criação de um PDF simples com 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 = "Olá, 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 complexos (tabelas, imagens, numeração de páginas), será necessário escrever muito código auxiliar. Por outro lado, você obtém o máximo de desempenho e o menor tamanho de arquivo.
3. TPPDF — biblioteca de terceiros de código aberto
TPPDF (GitHub: techprimate/TPPDF) é uma biblioteca Swift para geração de PDF com sintaxe declarativa. Ela suporta:
- Texto, imagens, tabelas, listas
- Cabeçalhos e rodapés, numeração de páginas
- Quebra automática de conteúdo entre páginas
- Fontes personalizadas, cores, bordas
Instalação via Swift Package Manager:
// Package.swiftdependencies: [ .package(url: "https://github.com/techprimate/TPPDF.git", from: "2.0.0")]Exemplo de criação de documento com tabela:
import TPPDF
func generateInvoice() -> Data? { let document = PDFDocument(format: .a4) // Adiciona título document.add(text: "Fatura nº123", style: PDFTextStyle.heading1) // Cria tabela let table = PDFTable(rows: 3, columns: 2) table[0][0].content = "Produto" table[0][1].content = "Preço" table[1][ Também na biblioteca
Firebase Android SDK para Kotlin: guia completo com exemplos
Monitoramento de aplicações PHP: ferramentas e práticas para o desenvolvedor
Trabalhando com Kafka em Rust: bibliotecas rdkafka e Franz
Aprendizado de Máquina em Go: visão geral de bibliotecas e frameworks (Golang)