使用 SwiftUI 视图创建 PDF 文件。
首先,定义构成 PDF 内容的视图。由于 PDF 页面尺寸是固定的,您需要确保您的内容适合您的页面尺寸。
import SwiftUI
struct MyPDFContent: View {
var body: some View {
Text("Hello, World")
}
}
然后,在 PDFRenderer
上使用 render(document:to:atPageSize:)
函数。此函数需要一个 PDFDocument
,可以通过传递一组视图来创建,每个视图构成一个单独的页面。
let document = PDFDocument {
MyPDFContent()
}
do {
try PDFRenderer.render(
document: document,
at: destination,
atPageSize: DIN.a4
)
} catch {
...
}
就是这样!您的 PDF 文件将被生成到给定的 destination
URL。
SwiftUI 是一个用于创建动态用户界面的框架。PDF 不是动态的,并且它们的页面尺寸是固定的。因此,您的视图中不可能有交互性,并且使用某些属性包装器会生成运行时警告,因为这些视图不属于场景中的任何视图层次结构。
交互式视图不会以其默认外观呈现。相反,它们将显示为红色划掉的区域。对于这些视图,您需要提供一个非交互式视图来模仿原始视图的外观。
以下替代视图已提供
Link
: PDFLink
要创建对渲染到 PDF 文件做出反应的视图,您可以使用 @Environment(\.renderingEnvironment)
来确定视图当前是否正在渲染到 PDF 中。这允许您切换视图的实现,并在实际应用程序窗口层次结构中使用时使其具有交互性。
同样,您可以使用 @Environment(\.pdfRenderingDPI)
获取 PDF 渲染 DPI。PDF 的页面尺寸使用 @Environment(\.pdfPageSize)
提供。