在 iOS 16
中,有一个新的 Api
可以帮我们快速的把 SwiftUI
视图转换为 PDF
矢量图,内容可以优雅的放大查看,主要使用的是 ImageRenderer
使用 ImageRenderer
步骤
- 选取需要渲染的
SwiftUI
视图; - 创建一个用于保存
PDF
的URL
地址; - 调用
render()
方法执行渲染; - 指定
PDF
的大小; (可以是固定尺寸,如 A4 或 US Letter,也可以是视图结构的大小) - 创建一个
CGContext
对象来处理PDF
页面; - 再创建一个新的
PDF
页面; - 将
SwiftUI
视图渲染到该页面上; - 结束页面并关闭
PDF
文档;
说的好像有点绕,贴一个示例,步骤放在注释中看应该就能清晰明了,代码量很小,写于 Xcode 14.2
@MainActor
struct ContentView: View {
var body: some View {
ShareLink("导出成PDF", item: render())
}
func render() -> URL {
// 1: 选取一个 ImageRenderer 视图
let renderer = ImageRenderer(content:
Text("Hello, www.codeun.com!")
.font(.largeTitle)
.foregroundColor(.white)
.padding()
.background(.blue)
.clipShape(Capsule())
)
// 2: 创建 PDF 保存地址
let url = URL.documentsDirectory.appending(path: "codeun.pdf")
// 3: 调用 render() 方法以开始执行渲染
renderer.render { size, context in
// 4: 指定 PDF 的大小;
var box = CGRect(x: 0, y: 0, width: size.width, height: size.height)
// 5: 创建一个 CGContext 对象来处理 PDF 页面
guard let pdf = CGContext(url as CFURL, mediaBox: &box, nil) else {
return
}
// 6: 再创建一个新的 PDF 页面
pdf.beginPDFPage(nil)
// 7: 将 SwiftUI 视图渲染到该页面上
context(pdf)
// 8: 结束页面并关闭 PDF 文档;
pdf.endPDFPage()
pdf.closePDF()
}
return url
}
}
本文自 https://www.codeun.com 发布,相应代码均自主编写并严格审阅和测试,完整代码中包含丰富的学习笔记和使用方式、实用技巧。
· 如若转载,请注明出处:https://www.codeun.com/archives/1114.html ·