2017-03-25 10 views
0

PDFのページ数を取得する簡単な関数を作成しようとしています。私が今見たすべてのコード例は、Swift 3で失敗するようですが、Xcodeが推奨するものであれば動作しません。Swift 3:PDFDocumentがクラッシュする

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! 
} 

任意のアイデアはなぜですか?

答えて

1

次のようにコードを変更します。

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 
} 

は基本的に、あなたのコードでは、あなたがCGPDFDocumentとしてCFURLをキャストしようとしていた、あなたはあなたがCFURLからCGPDFDocumentインスタンスを作成する必要があります:)ことはできません。これを行うと、PDFドキュメントのページ数を取得できます。

0

アップルには、CGPDFDocumentPDFDocumentという2つのPDFオブジェクトがあるようです。 2つ目は作業がはるかに簡単です。

import Quartz 

func NumPages(filename: String) -> Int { 

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