UIWebView全部区域截图保存为UIImage或者PDF

//  
//  UIWebView+ToFile.h  
//  UIWebViewToFile  
//  
//  Created by Tracy E on 13-6-10.  
//  Copyright (c) 2013 EsoftMobile.com. All rights reserved.  
//  
  
#import <UIKit/UIKit.h>  
  
@interface UIWebView (ToFile)  
  
- (UIImage *)imageRepresentation;  
  
- (NSData *)PDFData;  
  
@end  
//  
//  UIWebView+ToFile.m  
//  UIWebViewToFile  
//  
//  Created by Tracy E on 13-6-10.  
//  Copyright (c) 2013 EsoftMobile.com. All rights reserved.  
//  
  
#import "UIWebView+ToFile.h"  
#import <QuartzCore/QuartzCore.h>  
  
@implementation UIWebView (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, BOOLBOOL *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  

 

posted @ 2017-03-28 17:05  超神船长  阅读(238)  评论(0编辑  收藏  举报