需求
iOS 中将UIWebView中显示的内容转换成PDF,并且将PDF分享到微信,qq 。
需求拆解:
a.将webView中显示的内容渲染成PDF
b.将内容分享到微信qq
渲染PDF
- 首先UIPrintPageRender添加创建data的分类
- 关联需要渲染的对象
- 调用方法渲染,返回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];
//我们传入的时候尽量将
网友评论