是否可以在 SwiftUI 应用中显示 PDF 缩略图?

Posted

技术标签:

【中文标题】是否可以在 SwiftUI 应用中显示 PDF 缩略图?【英文标题】:Is it possible to display PDF thumbnails in SwiftUI app? 【发布时间】:2021-01-15 09:11:26 【问题描述】:

我很想知道是否可以像使用 UIKit 一样在 SwiftUI 应用程序中显示 pdf 文件的缩略图?如果有,怎么做?

我希望能够从 Firebase 存储中获取 PDF 文件,然后在应用中显示这些 PDF。

我找不到任何描述这个用例的东西...

【问题讨论】:

这里有很多questions (and answers) 与此问题相关。你检查过它们吗?也许this 或this one 【参考方案1】:

要在 SwiftUI 中显示 PDF 缩略图,您需要将 PDFThumbnailView 包裹起来,这是 UIView 中的 UIViewRepresentable

类似:

import PDFKit
import SwiftUI

struct PDFThumbnailRepresented : UIViewRepresentable 
    var pdfView : PDFView
    
    func makeUIView(context: Context) -> PDFThumbnailView 
        let thumbnail = PDFThumbnailView()
        thumbnail.pdfView = pdfView
        thumbnail.thumbnailSize = CGSize(width: 100, height: 100)
        thumbnail.layoutMode = .horizontal
        return thumbnail
    
    
    func updateUIView(_ uiView: PDFThumbnailView, context: Context) 
        //do any updates you need
        //you could update the thumbnailSize to the size of the view here if you want, for example
        //uiView.thumbnailSize = uiView.bounds.size
    

您可以通过 PDFView: PDFThumbnailRepresented(pdfView: pdfView) 来使用它

要创建您的 PDFView,您需要获取数据或 url 并创建如下内容:

guard let path = Bundle.main.url(forResource: "example", withExtension: "pdf") else  return 

if let document = PDFDocument(url: path) 
    pdfView.document = document

请注意,上面的示例是否在您应用的Bundle 中。您关于从 Firebase 存储加载它的问题超出了这个问题的范围,我假设只是在 SwiftUI 中显示 PDF 缩略图。

有关加载/创建 PDFThumbnailView 的更多资源,不包括像我上面那样包装它:https://www.hackingwithswift.com/example-code/libraries/how-to-show-pdf-thumbnails-using-pdfthumbnailview

【讨论】:

以上是关于是否可以在 SwiftUI 应用中显示 PDF 缩略图?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 SwiftUI 的表单中永久显示选取器?

Xcode 11 PDF 图像资产“保留矢量数据”在 SwiftUI 中不起作用?

在 SwiftUI 中,如何根据异步调用确定要显示的视图

如何使用 SwiftUI 按钮打开本地 PDF 文件?

在 SwiftUI UIViewRepresentable 上刷新 PDFViewer

如何有效地过滤 SwiftUI 中的长列表?