如何获取pdf的当前页码?

时间:2018-02-26 06:03:38

标签: ios objective-c xcode pdf core-graphics

默认的Core Graphics方法告诉当前活动的pdf页码。是否有任何方法可以获取页面指示器显示的当前活动页码。还有什么办法可以隐藏页面指示器吗? Objective-C中的答案将不胜感激。

感谢![enter image description here] 1

4 个答案:

答案 0 :(得分:2)

Swift 5.1

一个简单的解决方案

    @IBOutlet var pageNumber: NSTextField!

    let curPg = self.thePDFView.currentPage?.pageRef?.pageNumber
    pageNumber.stringValue = "Page \(String(describing: curPg!))"

答案 1 :(得分:0)

目标C

Entry

设置代理

CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)[NSURL fileURLWithPath:@"pdf path"]);
int pageCount = CGPDFDocumentGetNumberOfPages(pdf);
CGPDFDocumentRelease(pdf);

实施self.webView.delegate = self; 方法,您将获得以下页面计数...

webViewDidFinishLoad

其他

的Swift版本

从pdf文件中获取页数。

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    NSInteger pageCount = webView.pageCount; 

    //OR

    NSInteger count_horizontal = webView.scrollView.contentSize.width / webView.scrollView.frame.size.width;

    NSInteger count_verticel = webView.scrollView.contentSize.height / webView.scrollView.frame.size.height;
}

在网络视图中显示pdf并设置其代理

guard var pdf = CGPDFDocument(URL(fileURLWithPath: "pdf path") as CFURL) else {
        print("Not able to load pdf file.")
        return
    }

    let pageCount = CGPDFDocumentGetNumberOfPages(pdf);

实施 self.webView.delegate = self; 方法,您将获得以下页面计数...

webViewDidFinishLoad

答案 2 :(得分:0)

在PDFKit中很容易获得页码。请找到以下代码片段。

print(pdfDocument!.index(for: pdfView.currentPage!)

答案 3 :(得分:0)

这是一个古老的问题,答案应该在Objc中,但是我不得不在Swift中做一个非常相似的方法,这是我的解决方案。

首先,我为容器创建了一个出口,为当前页面创建了一个标签,为当前页面创建了另一个标签;

@IBOutlet weak var pageInfoContainer: UIView! 
@IBOutlet weak var currentPageLabel: UILabel!
@IBOutlet weak var totalPagesLabel: UILabel!

还有一个定时器,将在上面进行解释;

private var timer: Timer?

要在更改后尽快获取当前页面,您需要添加观察者;

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

不要忘记删除viewWillDisappear中的观察者!

现在一切就绪,让我们应用一些逻辑!

这是我的pdfView设置;

private func setupPdfView() {
    
    if let pdf: PDFDocument = pdfDocument {
        
        pdfView.autoScales = true
        pdfView.backgroundColor = .clear
        pdfView.document = pdf
        pdfView.usePageViewController(true, withViewOptions: nil)
    }
    
    if let totalPages: Int = pdfView.document?.pageCount {
        
        totalPagesLabel.text = String(totalPages)
    }
}

将通过观察者处理pageChange的方法;

@objc func handlePageChange() {

    if let currentPage: PDFPage = pdfView.currentPage, let pageIndex: Int = pdfView.document?.index(for: currentPage) {
        
        UIView.animate(withDuration: 0.5, animations: {
            
            self.pageInfoContainer.alpha = 1
        }) { (finished) in
            if finished {
                
                self.startTimer()
            }
        }
        
        currentPageLabel.text = String(pageIndex + 1)
    }
}

最后是计时器和方法;

private func startTimer() {
    
    timer?.invalidate()
    timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(whenTimerEnds), userInfo: nil, repeats: false)
}

@objc func whenTimerEnds() {
    
    UIView.animate(withDuration: 1) {
        
        self.pageInfoContainer.alpha = 0
    }
}

请记住,计时器被用作“糖果”,并且是完全可选的,这将在同一页面X秒钟后删除计数器

保持安全!