Convert PDF to UIImage

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() } 

My problem is converting the PDF to an image, but how to open the image in view mode, and then swipe left, right, up and down on the screen

+9
ios swift pdf-generation uigraphicscontext
source share
2 answers

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 { } } 
+12
source share

I have a solution to convert a Pdf page to UIImage. This PDF page code is converted to Uiimage and stored in the document document directory. PDF Download and Count Count for splitting Vise image.

  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)") } 
+7
source share

All Articles