PDFViewKit

使用 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 不是动态的,并且它们的页面尺寸是固定的。因此,您的视图中不可能有交互性,并且使用某些属性包装器会生成运行时警告,因为这些视图不属于场景中的任何视图层次结构。

交互式视图不会以其默认外观呈现。相反,它们将显示为红色划掉的区域。对于这些视图,您需要提供一个非交互式视图来模仿原始视图的外观。

以下替代视图已提供

实现您自己的 PDF 兼容视图

要创建对渲染到 PDF 文件做出反应的视图,您可以使用 @Environment(\.renderingEnvironment) 来确定视图当前是否正在渲染到 PDF 中。这允许您切换视图的实现,并在实际应用程序窗口层次结构中使用时使其具有交互性。

同样,您可以使用 @Environment(\.pdfRenderingDPI) 获取 PDF 渲染 DPI。PDF 的页面尺寸使用 @Environment(\.pdfPageSize) 提供。