【问题标题】:SWIFTUI: Draw on a PDFSWIFTUI:在 PDF 上绘图
【发布时间】:2021-01-10 18:42:03
【问题描述】:

所以我现在正在构建一个应用程序,我想在 PDF 上绘图 - 就像签名一样。

该应用程序是用 Swift 构建的,我使用的是 SwiftU、PencilKit、PDFKit 和 WebKit。我已经可以显示 PDF 并在视图中绘图。如果我使用我的 PDFView 作为我的 PencilKitCanvas 的背景,我基本上可以在该 PDF 上绘图,但我不认为这是要走的路。我也无法以这种方式保存新的 PDF。

ZStack {
            Image("background")
                .resizable()
                .edgesIgnoringSafeArea(.all)

            VisualEffectView(effect: UIBlurEffect(style: .light))
                .edgesIgnoringSafeArea(.all)
        VStack {

            
            if isPDFLoading == true {
                ActivityIndicator().frame(width: 150, height: 150)
            } else {
                
                PKCanvasRepresentation().background(PDFView(request: PDFPath)).edgesIgnoringSafeArea(.bottom)
            }

        }
        
    }

这是我的视图,这些是我的 PDF 和 PencilKitCanvasViews:

struct PDFView: UIViewRepresentable {
    let request: URLRequest

    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.load(self.request)
    }
}

...

    func setupDrawing() {
        let canvasView = PKCanvasView(frame: self.view.bounds)
        guard let window = view.window, let toolPicker = PKToolPicker.shared(for: window) else {
            return
        }
        toolPicker.setVisible(true, forFirstResponder: canvasView)
        toolPicker.addObserver(canvasView)
        canvasView.backgroundColor = .clear
        canvasView.becomeFirstResponder()
        view.addSubview(canvasView)
    }
}

/// Converts ViewController into a view for SwiftUI
struct PKCanvasRepresentation: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> PKCanvasViewController {
        return PKCanvasViewController()
    }

    func updateUIViewController(_ uiViewController: PKCanvasViewController, context: Context) {

    }

    typealias UIViewControllerType = PKCanvasViewController

}

那么我怎样才能准确地在 PDF 上绘图并保存呢?我是否必须将其全部保存为 UIImage 并将其转换为 PDF?

谢谢,原谅我的英语不好。

【问题讨论】:

标签: swift pdf swiftui pdfkit pencilkit


【解决方案1】:

看看这个教程:https://medium.com/better-programming/ios-pdfkit-ink-annotations-tutorial-4ba19b474dce

它只是有点 hacky,但它直接将绘图记录为 PDF 注释,可以与 PDF 一起保存。不得保护 PDF 以对其进行更改。

PencilKit 非常适合低延迟绘图和内置功能集。您可以将绘图单独保存为PKDrawing,这非常方便。 PKDrawing 不允许您存储位图(例如来自文本框的文本)。

【讨论】:

    【解决方案2】:

    最好用 QLPreviewViewController 注释 pdf。首先,我也使用了 PencilKit,但由于苹果的文件预览,这不是必需的。 我在这篇文章中解释了如何实现这种方法:https://stackoverflow.com/a/68743098/12035498

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2021-01-26
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多