日冰, 我试图将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()
}
}
}
所以我试图找到一种解决方案,将数据(即pdf文件的NSData)转换为图像文件的NSData格式,这样我就可以通过createFileAtPath函数将图像NSData保存为一个论证。
提前致谢!
更新:
参考Rendering a CGPDFPage into a 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)
所以图像得到保存,但分辨率很差。经过进一步研究,我发现'pageRect'的宽度和高度现在低于用GIMP以约0.72的比例打开时的尺寸。 。 println语句显示了这一点。这将创建pdf文件的像素化图像。嗯,任何想法导致尺寸转换下降的原因是什么?如何解决它?