SwiftUI中如何从二进制Data对象展示PDF文件
在SwiftUI中展示PDF Data
借助iOS 11+支持的PDFKit框架,有两种简单方案可以实现需求,下面是具体代码实现:
方法一:封装UIKit的PDFView为SwiftUI视图
这种方式支持完整的PDF交互(缩放、翻页等),是最常用的方案。创建一个遵循UIViewRepresentable的自定义视图,包装UIKit的PDFView:
import SwiftUI import PDFKit struct PDFViewer: UIViewRepresentable { let pdfData: Data func makeUIView(context: Context) -> PDFView { let pdfView = PDFView() pdfView.autoScales = true // 自动适配屏幕缩放 pdfView.displayMode = .singlePageContinuous // 连续单页显示 pdfView.displayDirection = .vertical // 垂直滚动 // 将Data转换为PDF文档并设置到视图 if let document = PDFDocument(data: pdfData) { pdfView.document = document } return pdfView } func updateUIView(_ uiView: PDFView, context: Context) { // 数据更新时重新加载文档 if let document = PDFDocument(data: pdfData) { uiView.document = document } } }
在SwiftUI主视图中使用
直接在你的页面里调用这个自定义视图,传入已解码的PDF Data:
struct ContentView: View { // 替换为你从后端解码得到的实际PDF Data let pdfData: Data var body: some View { if pdfData.isEmpty { Text("无效的PDF数据") } else { PDFViewer(pdfData: pdfData) .edgesIgnoringSafeArea(.all) // 可选:全屏显示,忽略安全区域 } } }
方法二:简易单页预览(适合少页数PDF)
如果只需要快速预览PDF的单页内容,可以将PDF页面转为图片后展示:
import SwiftUI import PDFKit struct SimplePDFPreview: View { let pdfData: Data var body: some View { Group { if let document = PDFDocument(data: pdfData), let firstPage = document.page(at: 0), let pageImage = firstPage.thumbnail(of: UIScreen.main.bounds.size, for: .mediaBox) { Image(uiImage: pageImage) .resizable() .scaledToFit() } else { Text("无法加载PDF") } } } }
内容的提问来源于stack exchange,提问作者visandres
相关产品推荐
相关产品推荐

