所以我现在正在构建一个应用程序,我想在 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?
谢谢并原谅我的英语不好。