如何使用 SwiftUI 按钮打开本地 PDF 文件?
Posted
技术标签:
【中文标题】如何使用 SwiftUI 按钮打开本地 PDF 文件?【英文标题】:How can I open a local PDF file using a SwiftUI button? 【发布时间】:2020-04-28 10:43:30 【问题描述】:我想在点击按钮时通过新视图显示本地 PDF 文件。 我尝试使用 UIViewRepresentable WebView 执行此操作,但它不起作用(我仅通过 NavigationList 使用 WebView)。
我留下了我的代码,但如果 WebView 不是最佳选择,请随时提出更好的选择。
按钮视图
import SwiftUI
struct ResumeView: View
let sfSymbol: String
let text: String
let fileUrl = Bundle.main.path(forResource: "Resume", ofType: "pdf")
var body: some View
RoundedRectangle(cornerRadius: 25)
.fill(Color.white)
.frame(height: 50.0)
.overlay(
HStack
Image(systemName: sfSymbol)
.foregroundColor(.init(red: 0.20, green: 0.33, blue: 0.55, opacity: 1.00))
Button(action:
WebView(urlString: self.fileUrl)
)
Text(text)
.foregroundColor(.black)
)
网络视图
import Foundation
import SwiftUI
import WebKit
struct WebView: UIViewRepresentable
let urlString: String?
func makeUIView(context: Context) -> WKWebView
return WKWebView()
func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>)
if let safeUrlString = urlString
if let url = URL(string: safeUrlString)
let request = URLRequest(url: url)
uiView.load(request)
【问题讨论】:
Slaine06,显然您的问题的答案对您不起作用,但您自己设法提出了解决方案(使用工作表)。对于我们这些正在为“”而苦苦挣扎的人,您愿意分享您的解决方案的代码吗?在 *** 上,您可以回答自己的问题 - 为面临相同问题的未来开发人员提供帮助。谢谢。 【参考方案1】:使用 PDFKit
我们加载本地 PDF
文件。请尝试以下代码。
import SwiftUI
struct ResumeView: View
....
let fileUrl = Bundle.main.url(forResource: "Resume", withExtension: "pdf")!
var body: some View
....
Button(action:
PDFKitView(url: self.fileUrl)
)
Text(text)
.foregroundColor(.black)
....
PDFKitView
import PDFKit
struct PDFKitView: View
var url: URL
var body: some View
PDFKitRepresentedView(url)
struct PDFKitRepresentedView: UIViewRepresentable
let url: URL
init(_ url: URL)
self.url = url
func makeUIView(context: UIViewRepresentableContext<PDFKitRepresentedView>) -> PDFKitRepresentedView.UIViewType
let pdfView = PDFView()
pdfView.document = PDFDocument(url: self.url)
pdfView.autoScales = true
return pdfView
func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<PDFKitRepresentedView>)
// Update the view.
【讨论】:
仅使用该代码我没有收到任何错误,但视图没有显示自己。所以我查找了在 SwiftUI 中以模态方式显示视图的方法。我用工作表解决了。仍然让我能够解决我的问题,非常感谢。【参考方案2】:要在应用中打开 pdf,您必须这样做:
struct PDFKitRepresentedView: UIViewRepresentable
func makeUIView(context: UIViewRepresentableContext<PDFKitRepresentedView>) -> PDFKitRepresentedView.UIViewType
let pdfView = PDFView()
pdfView.document = PDFDocument(url: getDocumentsDirectory().appendingPathComponent("earth.pdf"))
pdfView.autoScales = true
return pdfView
func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<PDFKitRepresentedView>)
// EMPTY!
并且,在哪里使用 PDFKitRepresentedView(),下面的例子
VStack
pdfView
Button label: Text("Test")
【讨论】:
以上是关于如何使用 SwiftUI 按钮打开本地 PDF 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将本地HTML网页多个文件转换成PDF(为了在IPAD上使用)