Convert PDF to UIImage

对着背影说爱祢 提交于 2019-11-27 15:17:59

问题


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 PDF convert to image but how to open image in View then swipe left,right,up and down how to possible


回答1:


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 {

    }

}



回答2:


I Got the Solution for Pdf page convert in UIImage. This code PDF Page convert in Uiimage and save in image document directory. PDF Download And Page Count to separate Page 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)")
    }


来源:https://stackoverflow.com/questions/32604857/convert-pdf-to-uiimage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!