2015-09-16 55 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() 
} 

Il mio problema è PDF convertire in immagine, ma come per aprire l'immagine in vista poi scorrere verso sinistra, destra, su e giù come possibileConversione da PDF a UIImage

risposta

7

ho avuto la soluzione per la pagina PDF Convert in UIImage . Questa pagina di codice PDF viene convertita in Uiimage e salvata nella directory del documento immagine. Download PDF e conteggio pagine per separare la pagina vise image convert.

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

bella soluzione per PDF convertire in immagine a Swift .. :) @bhargav – InsaneCat

+0

da dove viene l'array viene? come funziona? – 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

ciao Blain. provo a eseguire il tuo codice ma {} non blocca l'esecuzione. Sai perché? –