Swift 3:PDFDocument崩溃了

时间:2017-03-25 12:35:57

标签: swift macos cocoa pdf

我正在尝试编写一个简单的函数来获取PDF中的页数。我现在看到的每个代码示例似乎都失败了Swift 3,而Xcode推荐的任何代码仍无效。

func pageCount(filepath: String) -> Int {

    let localUrl  = filepath as CFString
    let pdfDocumentRef = CFURLCreateWithFileSystemPath(nil, localUrl, CFURLPathStyle.cfurlposixPathStyle, false)
    let page_count = (pdfDocumentRef as! CGPDFDocument).numberOfPages

    return page_count
}

这也不起作用:

func pageCount(filepath: String) -> Int {

    let url = NSURL(fileURLWithPath: filepath)
    let pdf = CGPDFDocument(url)
    let page_count = pdf?.numberOfPages

    return page_count!
}

任何想法为什么?

2 个答案:

答案 0 :(得分:2)

修改您的代码,如下所示:

func pageCount(filepath: String) -> Int {
    var count = 0
    let localUrl  = filepath as CFString
    if let pdfURL = CFURLCreateWithFileSystemPath(nil, localUrl, CFURLPathStyle.cfurlposixPathStyle, false) {
        if let pdf = CGPDFDocument(pdfURL) {
            let page_count = pdf.numberOfPages
            count = pdf.numberOfPages
        }
    }
    return count
}

基本上,在您的代码中,您试图将CFURL强制转换为CGPDFDocument而您无法执行此操作:)您需要从{{1}创建CGPDFDocument实例}}。完成后,您可以获取PDF文档的页数。

答案 1 :(得分:0)

Apple似乎有两个PDF对象:CGPDFDocumentPDFDocument。第二个更容易使用。

import Quartz

func NumPages(filename: String) -> Int {

     let pdfDoc = PDFDocument(url: URL(fileURLWithPath: filename))!
    return pdfDoc.pageCount
}