如何使用 PDFkit 检测滚动到 PDF 中的另一个页面

Posted

技术标签:

【中文标题】如何使用 PDFkit 检测滚动到 PDF 中的另一个页面【英文标题】:How to detect scrolling to another page in PDF using PDFkit 【发布时间】:2019-03-17 11:58:44 【问题描述】:

我正在尝试添加当前页码 所以当用户滚动到另一个页面时,它会显示 例如 2 of 3(如果 pdf 有 3 页)

目前,我使用此代码

它将始终显示 1 of 3

我认为 PDFkit 使用 UIScrollView 所以我需要以在滚动到另一个页面时可以检测到的方式到达 ScrollView,然后增加当前页码

我没有找到任何方法可以在 PDFkit 中访问滚动视图

 func showCurrentPageIndex()

        guard let totalPages = pdfContainerView.document?.pageCount else return
        guard let currentPage = pdfContainerView.currentPage else return
        guard let currentPageRef = currentPage.pageRef else return

let pageIndex = currentPageRef.pageNumber

      totalPageNumbers.text = "\(totalPages)"
      currentPageIndex.text =  "\(pageIndex)"
    

【问题讨论】:

【参考方案1】:

使用通知 (PDFViewPageChanged)。

import UIKit
import PDFKit

class ViewController: UIViewController, PDFViewDelegate 
    // MARK: - Variables
    var totalCount = Int()

    // MARK: - IBOutlet
    @IBOutlet weak var pdfView: PDFView!

    // MARK: - Life cycle
    override func viewDidLoad() 
        super.viewDidLoad()

        let filePath = "Some file document path"
        pdfView.document = getDocument(path: filePath)
        if let total = pdfView.document?.pageCount 
            totalCount = total
        
        pdfView.backgroundColor = .lightGray
        pdfView.autoScales = true
        pdfView.displayMode = .singlePageContinuous
        pdfView.usePageViewController(true, withViewOptions: nil)
    

    override func viewDidAppear(_ animated: Bool) 
        super.viewDidAppear(animated)

        /* notification */
        NotificationCenter.default.addObserver (self, selector: #selector(handlePageChange), name: Notification.Name.PDFViewPageChanged, object: nil)
    

    func getDocument(path: String) -> PDFDocument? 
        let pdfURL = URL(fileURLWithPath: filePath)
        let document = PDFDocument(url: pdfURL)
        return document
    

【讨论】:

非常感谢!它工作我不知道有一个页面更改通知只是为了让你的代码完整答案你忘记添加handlePageChange函数,这对我来说是相同的函数我添加了showCurrentPageIndex()我认为你必须在viewDidDisappear中删除NotificationCenter @ 987654323@

以上是关于如何使用 PDFkit 检测滚动到 PDF 中的另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PDFKit 突出显示 pdf 中的选定文本?

使用PDFKit写一个基本的PDF阅读器

如何防止 PDFKit/NSImage 中的渲染伪影?

从 html 转换的 pdf 中的页码 - pdfkit、python/django

如何从使用 pdfkit 相机拍摄的图像创建 pdf

如何创建应用了布局的 pdf 文件。使用 pdfkit 宝石