Geração de relatórios PDF em Swift (iOS/macOS)
A criação de documentos PDF nas plataformas Apple é uma das principais tarefas no desenvolvimento de aplicativos empresariais, relatórios financeiros ou sistemas de gerenciamento de documentos. Ao contrário da web stack, onde muitas bibliotecas de terceiros são usadas, no ecossistema Swift para trabalhar com PDF existem tanto frameworks nativos poderosos quanto soluções especializadas de terceiros. Neste artigo, analisaremos detalhadamente todas as principais ferramentas para geração de relatórios PDF em Swift para iOS e macOS.
Frameworks nativos da Apple
A Apple oferece duas maneiras principais de criar documentos PDF: UIGraphicsPDFRenderer (para UIKit) e PDFKit (para trabalhar com PDFs existentes). No macOS, também está disponível o NSGraphicsContext com suporte a PDF.
UIGraphicsPDFRenderer (iOS 10+)
Esta é a principal ferramenta para gerar PDF a partir de conteúdo UIKit. Ela permite desenhar texto, imagens, tabelas e gráficos arbitrários no contexto de uma página PDF.
import UIKit
func generateReport(data: String) -> Data { let pageSize = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4 let renderer = UIGraphicsPDFRenderer(bounds: pageSize) return renderer.pdfData { context in context.beginPage() // Título let title = "Relatório de Vendas" let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.boldSystemFont(ofSize: 24), .foregroundColor: UIColor.darkGray ] title.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) // Conteúdo let textAttributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 14) ] data.draw(at: CGPoint(x: 50, y: 100), withAttributes: textAttributes) // Linha separadora context.cgContext.setStrokeColor(UIColor.lightGray.cgColor) context.cgContext.setLineWidth(1) context.cgContext.move(to: CGPoint(x: 50, y: 90)) context.cgContext.addLine(to: CGPoint(x: 545, y: 90)) context.cgContext.strokePath() }}PDFKit (iOS 11+, macOS 10.13+)
PDFKit é um framework de nível mais alto que permite não apenas criar, mas também editar PDFs existentes. Ele suporta anotações, formulários, marcadores e trabalho com documentos de várias páginas.
import PDFKit
func createPDFWithText() -> PDFDocument { let page = PDFPage() let pdfDocument = PDFDocument() // Criando uma página com texto let text = "PDFKit permite adicionar texto e anotações facilmente" let textAnnotation = PDFAnnotation( bounds: CGRect(x: 50, y: 700, width: 500, height: 100), forType: .freeText, withProperties: nil ) textAnnotation.contents = text textAnnotation.font = UIFont.systemFont(ofSize: 18) page.addAnnotation(textAnnotation) pdfDocument.insert(page, at: 0) return pdfDocument}Bibliotecas de terceiros para Swift
Embora as ferramentas nativas cubram a maioria das tarefas, existem situações em que é necessária funcionalidade especializada: trabalho com modelos, exportação para PDF a partir do SwiftUI ou suporte para layout complexo.
SwiftUI e PDF (iOS 14+, macOS 11+)
A partir do iOS 14, é possível converter uma view SwiftUI em PDF usando ImageRenderer:
import SwiftUI
struct ReportView: View { var body: some View { VStack(alignment: .leading) { Text("Relatório Mensal") .font(.largeTitle) .foregroundColor(.blue) Text("Dados de agosto de 2024") .font(.headline) Divider() Text("Receita: R$ 1.234.567") .font(.body) } .padding() }}
func generatePDFFromSwiftUI() -> Data { let vie Também na biblioteca
Biblioteca cpp-httplib: Cliente OAuth 2.0 em C++ para aplicações web
Processamento de JSON em Node.js: guia completo
Frameworks CLI para Go (Golang): visão geral completa e comparação
Envio de SMS em Java: Visão geral e exemplos de uso de bibliotecas API (Twilio, Nexmo)
OkHttp para Kotlin: guia completo com exemplos