0

所以我现在正在构建一个应用程序,我想在 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?

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

4

2 回答 2

0

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

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

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

于 2020-09-27T13:27:58.757 回答
0

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

于 2021-08-11T13:59:39.570 回答