2015-09-16 25 views
8
func drawOnPDF(path: String) 
{ 
    // Get existing Pdf reference 
    let pdf = CGPDFDocumentCreateWithURL(NSURL(fileURLWithPath: path)) 

    // Get page count of pdf, so we can loop through pages and draw them accordingly 
    let pageCount = CGPDFDocumentGetNumberOfPages(pdf); 

    // Write to file 
    UIGraphicsBeginPDFContextToFile(path, CGRectZero, nil) 

    // Write to data 
//  var data = NSMutableData() 
//  UIGraphicsBeginPDFContextToData(data, CGRectZero, nil) 

    for index in 1...pageCount { 
     let page = CGPDFDocumentGetPage(pdf, index) 
     let pageFrame = CGPDFPageGetBoxRect(page, kCGPDFMediaBox) 

     UIGraphicsBeginPDFPageWithInfo(pageFrame, nil) 

     var ctx = UIGraphicsGetCurrentContext() 

     // Draw existing page 
     CGContextSaveGState(ctx); 
     CGContextScaleCTM(ctx, 1, -1); 
     CGContextTranslateCTM(ctx, 0, -pageFrame.size.height); 
     CGContextDrawPDFPage(ctx, page); 
     CGContextRestoreGState(ctx); 

     // Draw image on top of page 
     var image = UIImage(named: "signature3") 
     image?.drawInRect(CGRectMake(100, 100, 100, 100)) 
     // Draw red box on top of page 
     //UIColor.redColor().set() 
     //UIRectFill(CGRectMake(20, 20, 100, 100)); 
    } 

    UIGraphicsEndPDFContext() 
} 

Vấn đề của tôi là PDF chuyển đổi sang hình ảnh nhưng làm thế nào để mở hình ảnh trong Xem rồi vuốt sang trái, phải, lên xuống như thế nào để có thểChuyển đổi PDF sang UIImage

Trả lời

7

tôi Chấn Giải pháp cho trang Pdf chuyển đổi trong UIImage . Mã PDF Trang này chuyển đổi trong Uiimage và lưu trong thư mục tài liệu hình ảnh. Tải xuống PDF và số lượng trang để tách riêng chuyển đổi hình ảnh vise.

func drawOnPDF(path: String) 
    { 
     var urlstr: NSURL = NSURL.fileURLWithPath(path)! 
     var pdf: CGPDFDocumentRef = CGPDFDocumentCreateWithURL(urlstr) 
     var page: CGPDFPageRef; 
     var frame: CGRect = CGRectMake(0, 0, 100, 200) 
     var pageCount: Int = CGPDFDocumentGetNumberOfPages(pdf); 
     for (var i = 0; i < pageCount; i++) 
     { 
      var mypage: CGPDFPageRef = CGPDFDocumentGetPage(pdf, i+1) 
      frame = CGPDFPageGetBoxRect(mypage, kCGPDFMediaBox) 
      UIGraphicsBeginImageContext(CGSizeMake(600, 600*(frame.size.height/frame.size.width))) 
      var ctx: CGContextRef = UIGraphicsGetCurrentContext() 
      CGContextSaveGState(ctx) 
      CGContextTranslateCTM(ctx, 0.0, frame.size.height) 
      CGContextScaleCTM(ctx, 1.0, -1.0) 
      CGContextSetGrayFillColor(ctx, 1.0, 1.0) 
      CGContextFillRect(ctx, frame) 
      page = CGPDFDocumentGetPage(pdf, i + 1) 
      var pdfTransform: CGAffineTransform = CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, frame, 0, true) 
      CGContextConcatCTM(ctx, pdfTransform); 
      CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh) 
      CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault) 
      CGContextDrawPDFPage(ctx, page) 
      var thumbnailImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
      CGContextRestoreGState(ctx) 
      var documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as! String 
      documentsPath = documentsPath.stringByAppendingFormat("/Page%d.png", i+1) 
      UIGraphicsEndImageContext() 
      imagedata = UIImagePNGRepresentation(thumbnailImage) 
      imagedata.writeToFile(documentsPath, atomically: true) 
      array.addObject(documentsPath) 
     } 
     let dirPath = array.objectAtIndex(0) as? String 
     let image = UIImage(contentsOfFile: dirPath!) 
     NSUserDefaults.standardUserDefaults().setObject(array, forKey: "Array") 
     println("\(array)") 
    } 
+0

đẹp giải pháp cho PDF chuyển đổi sang hình ảnh trong Swift .. :) @bhargav – InsaneCat

+0

nơi nào mảng đến từ đâu? Cái này hoạt động ra sao? – MizAkita

8

Swift 3:

func convertPDFPageToImage(page:Int) { 

    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
    let filePath = documentsURL.appendingPathComponent("pathLocation").path 

    do { 

     let pdfdata = try NSData(contentsOfFile: filePath, options: NSData.ReadingOptions.init(rawValue: 0)) 

     let pdfData = pdfdata as CFData 
     let provider:CGDataProvider = CGDataProvider(data: pdfData)! 
     let pdfDoc:CGPDFDocument = CGPDFDocument(provider)! 
     pageCount = pdfDoc.numberOfPages; 
     let pdfPage:CGPDFPage = pdfDoc.page(at: page)! 
     var pageRect:CGRect = pdfPage.getBoxRect(.mediaBox) 
     pageRect.size = CGSize(width:pageRect.size.width, height:pageRect.size.height) 

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

     UIGraphicsBeginImageContext(pageRect.size) 
     let context:CGContext = UIGraphicsGetCurrentContext()! 
     context.saveGState() 
     context.translateBy(x: 0.0, y: pageRect.size.height) 
     context.scaleBy(x: 1.0, y: -1.0) 
     context.concatenate(pdfPage.getDrawingTransform(.mediaBox, rect: pageRect, rotate: 0, preserveAspectRatio: true)) 
     context.drawPDFPage(pdfPage) 
     context.restoreGState() 
     let pdfImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext()    

     self.imageView.image = pdfImage 

    } 
    catch { 

    } 

} 
+0

hi Blain. tôi cố gắng để chạy mã của bạn nhưng làm {} khối không thực thi.do bạn biết tại sao? –

Các vấn đề liên quan