美文网首页
iOS【WKWebView转PDF、图片】

iOS【WKWebView转PDF、图片】

作者: NJ_墨 | 来源:发表于2018-02-27 15:21 被阅读690次
    #import <WebKit/WebKit.h>
    
    @interface WKWebView (toFile)
    
    - (UIImage *)imageRepresentation;
    
    - (NSData *)PDFData;
    
    @end
    
    
    #import "WKWebView+toFile.h"
    #import <QuartzCore/QuartzCore.h>
    
    @implementation WKWebView (toFile)
    
    - (UIImage *)imageRepresentation{
        CGFloat scale = [UIScreen mainScreen].scale;
        
        CGSize boundsSize = self.bounds.size;
        CGFloat boundsWidth = boundsSize.width;
        CGFloat boundsHeight = boundsSize.height;
        
        CGSize contentSize = self.scrollView.contentSize;
        CGFloat contentHeight = contentSize.height;
        
        CGPoint offset = self.scrollView.contentOffset;
        
        [self.scrollView setContentOffset:CGPointMake(0, 0)];
        
        NSMutableArray *images = [NSMutableArray array];
        while (contentHeight > 0) {
            UIGraphicsBeginImageContextWithOptions(boundsSize, NO, 0.0);
            [self.layer renderInContext:UIGraphicsGetCurrentContext()];
            UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            [images addObject:image];
            
            CGFloat offsetY = self.scrollView.contentOffset.y;
            [self.scrollView setContentOffset:CGPointMake(0, offsetY + boundsHeight)];
            contentHeight -= boundsHeight;
        }
        
        [self.scrollView setContentOffset:offset];
        
        CGSize imageSize = CGSizeMake(contentSize.width * scale,
                                      contentSize.height * scale);
        UIGraphicsBeginImageContext(imageSize);
        [images enumerateObjectsUsingBlock:^(UIImage *image, NSUInteger idx, BOOL *stop) {
            [image drawInRect:CGRectMake(0,
                                         scale * boundsHeight * idx,
                                         scale * boundsWidth,
                                         scale * boundsHeight)];
        }];
        UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return fullImage;
    }
    
    - (NSData *)PDFData{
        UIViewPrintFormatter *fmt = [self viewPrintFormatter];
        UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init];
        [render addPrintFormatter:fmt startingAtPageAtIndex:0];
        CGRect page;
        page.origin.x=0;
        page.origin.y=0;
        page.size.width=600;
        page.size.height=768;
        
        CGRect printable=CGRectInset( page, 50, 50 );
        [render setValue:[NSValue valueWithCGRect:page] forKey:@"paperRect"];
        [render setValue:[NSValue valueWithCGRect:printable] forKey:@"printableRect"];
        
        NSMutableData * pdfData = [NSMutableData data];
        UIGraphicsBeginPDFContextToData( pdfData, CGRectZero, nil );
        
        for (NSInteger i=0; i < [render numberOfPages]; i++)
        {
            UIGraphicsBeginPDFPage();
            CGRect bounds = UIGraphicsGetPDFContextBounds();
            [render drawPageAtIndex:i inRect:bounds];
            
        }
        UIGraphicsEndPDFContext();
        return pdfData;
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:iOS【WKWebView转PDF、图片】

          本文链接:https://www.haomeiwen.com/subject/rlhmxftx.html