将pdf的NSData转换为图像文件的NSData

Vic*_*Vic 5 pdf nsdata ios swift

嗨,我正在尝试将pdf文件另存为jpg文件。我有许多要查询的网址,这些网址链接都是1页pdf文件。

var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let urlRequest = NSURLRequest(URL: NSURL(string: downloadUrl[index])!)
NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) { (response, data, error) -> Void in

  var savePath = path.stringByAppendingPathComponent(file_name + ".jpg")

  if let httpResponse = response as? NSHTTPURLResponse {
    if let contentType = httpResponse.allHeaderFields["Content-Type"] as? NSString {
      let fileType = contentType.componentsSeparatedByString("/").last! as! String
      if fileType == "pdf" {

        // convert to jpg before saving!

        NSFileManager.defaultManager().createFileAtPath(savePath, contents: convertedData, attributes: nil)
      } else {
        NSFileManager.defaultManager().createFileAtPath(savePath, contents: data, attributes: nil)
      }

      self.tableView.reloadData()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,我试图找到一种解决方案,以将数据(即pdf文件的NSData)转换为图像文件的NSData格式,以便我可以通过函数createFileAtPath将其保存,其中图像NSData作为参数之一。

提前致谢!

更新:

关于将CGPDFPage渲染到UIImage和David的(thx!)链接中,

// replace "//convert to jpg before saving!" in the code snippet above
var pdfData = data as CFDataRef
var provider:CGDataProviderRef = CGDataProviderCreateWithCFData(pdfData)
var pdfDoc:CGPDFDocument = CGPDFDocumentCreateWithProvider(provider)
var pdfPage:CGPDFPage = CGPDFDocumentGetPage(pdfDoc, 1)
var pageRect:CGRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox)
pageRect.size = CGSizeMake(pageRect.size.width, pageRect.size.height)

println("\(pageRect.width) by \(pageRect.height)")

UIGraphicsBeginImageContext(pageRect.size)
var context:CGContextRef = UIGraphicsGetCurrentContext()
CGContextSaveGState(context)
CGContextTranslateCTM(context, 0.0, pageRect.size.height)
CGContextScaleCTM(context, 1.0, -1.0)
CGContextConcatCTM(context, CGPDFPageGetDrawingTransform(pdfPage, kCGPDFMediaBox, pageRect, 0, true))
CGContextDrawPDFPage(context, pdfPage)
CGContextRestoreGState(context)
let pdfImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

let convertedData:NSData = UIImagePNGRepresentation(pdfImage)
convertedData.writeToFile(savePath, atomically: true)
Run Code Online (Sandbox Code Playgroud)

因此保存了图像,但是分辨率很差。在进一步研究中,我发现'pageRect'的宽度和高度现在比使用GIMP打开时所保持的尺寸要低,比率约为0.72。println语句显示了这一点。这将创建pdf文件的像素化图像。嗯,什么想法导致尺寸转换下降?如何解决?