Swift中的PDF生成:为iOS和macOS创建文档

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift中的PDF生成(iOS/macOS):完整指南



创建PDF文档是iOS和macOS应用程序中的常见任务之一:从生成报告和发票到导出数据和创建电子书。在Swift中,有几种内置和第三方工具可用于此目的。在本文中,我们将详细讨论在Apple平台上生成PDF的主要方法、它们的功能以及使用示例。



Apple内置框架



Apple生态系统提供了强大的工具,无需第三方依赖即可处理PDF。主要工具包括:



  • UIGraphicsPDFRenderer(iOS 10+)——用于在UIKit中创建PDF的现代API。
  • PDFKit——用于显示、编辑和创建PDF的框架(适用于iOS 11+和macOS 10.13+)。
  • Core Graphics(Quartz 2D)——用于绘制和生成PDF的底层C语言API。


1. UIGraphicsPDFRenderer——简单快速的入门方式



这是iOS中最方便的方法。它允许您通过使用UIKit(UIView、UIImage、文本等)绘制来创建多页PDF。



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()

// 绘制文本 let text = "你好,PDF世界!" let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 24), .foregroundColor: UIColor.black ] text.draw(at: CGPoint(x: 50, y: 100), withAttributes: attributes)

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

// 第二页 context.beginPage() let text2 = "这是第二页" text2.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) }

return data}

// 保存到文件if 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已保存: \\(pdfURL)")}


2. PDFKit——用于高级文档处理



PDFKit提供了PDFDocument和PDFPage类。它非常适合从带有格式的文本、表格和图像创建PDF。支持注释、书签和表单。



import PDFKit

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

// 通过NSAttributedString创建页面 let pageRect = CGRect(x: 0, y: 0, width: 612, height: 792) // US Letter let text = NSAttributedString(string: "使用PDFKit的PDF示例第二行") let page = PDFPage()

// 渲染到页面上下文 let renderer = UIGraphicsImageRenderer(bounds: pageRect) let image = renderer.image { ctx in text.draw(at: CGPoint(x: 72, y: 72)) }

// 从图像创建页面(简化版) // 在实际项目中,请使用带有drawBlock的PDFPage let finalPage = PDFPage(image: image) ?? PDFPage() document.insert(finalPage, at: 0)

return document}

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


重要提示:PDFKit仅适用于iOS 11+/macOS 10.13+。对于更旧的版本,请使用UIGraphicsPDFRenderer。



3. Core Graphics (Quartz 2D)——最大程度的控制



如果您的

推荐