美文网首页
UIPrintPageRenderer 和 UIActivity

UIPrintPageRenderer 和 UIActivity

作者: 木兮_君兮 | 来源:发表于2019-05-06 10:17 被阅读0次

需求

iOS 中将UIWebView中显示的内容转换成PDF,并且将PDF分享到微信,qq 。

需求拆解:
a.将webView中显示的内容渲染成PDF
b.将内容分享到微信qq

渲染PDF

  1. 首先UIPrintPageRender添加创建data的分类
  2. 关联需要渲染的对象
  3. 调用方法渲染,返回NSData

1.首先UIPrintPageRender添加创建data的分类

@implementation UIPrintPageRenderer (LBPDF)

- (NSData*) printToPDF {
    NSMutableData *pdfData = [NSMutableData data];
    UIGraphicsBeginPDFContextToData( pdfData, self.paperRect, nil );
    [self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)];
    CGRect bounds = UIGraphicsGetPDFContextBounds();
    for ( int i = 0 ; i < self.numberOfPages ; i++ ) {
        UIGraphicsBeginPDFPage();
        [self drawPageAtIndex: i inRect: bounds];
    }
    UIGraphicsEndPDFContext();
    return pdfData;
}
@end

2. 关联需要渲染的对象 ,3. 调用方法渲染,返回NSData

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init];
    [render addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0];//关联对象
    NSUInteger contentHeight = webView.scrollView.contentSize.height;
    NSUInteger contentWidth = webView.scrollView.contentSize.width;
    CGSize contentSize = CGSizeMake(contentWidth, contentHeight);
    //  需要打印的frame
    CGRect printableRect = CGRectMake(0,
                                      0,
                                      contentSize.width,
                                      contentSize.height);
    // 纸张的规格
    CGRect paperRect = CGRectMake(0, 0, contentSize.width, contentSize.height);
    [render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"]; //因为是readonly属性,所以我们只能用KVC 进行赋值
    [render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"];
    NSData *pdfData = [render printToPDF];
    NSString *fileUrl = [NSString stringWithFormat:@"%@temp.pdf",NSTemporaryDirectory()];
    [pdfData writeToFile:fileUrl atomically: YES];
}

UIActivityViewController


 UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[data,fileUrl] applicationActivities:nil];
 [self presentViewController:activityVC animated:YES completion:nil];
//我们传入的时候尽量将


相关文章

网友评论

      本文标题:UIPrintPageRenderer 和 UIActivity

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