當時在開發新版本,領導告訴我們,需要實現一個讀取H5界面內容,進行本地保存PDF格式進行觀看.進行研究這個東西.
H5界面生成PDF需要的倆中形式:
1:圖片的形式的保存.
主要是截取H5界面的所有內容,是圖片形式的,然后生成PDF格式.
2:截取H5界面字符串和圖片
保存的所有的字和圖片,進行拼裝,然后以不同樣式進行保存PDF格式
第一種方法很只是簡單的操作就可以,但是滿足不了需求,只能選擇第二個.
但是第2個截取保存數據和圖片,自己寫一套的話,工作量很大的.
利用系統里面的UIWebView
iOS開發人員都太熟悉不過了吧,哈哈,都是用這個方法
[UIWebView loadHTMLString:@"" baseURL:@""];
進行加載H5界面所有文字和圖片.
然后進行下面的方法進行保存數據到本地
這個是UIWebVIew擴展類,自己寫就行
- (NSData *)converToPDF{
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;
}
//點擊保存進行調用上面的方法
- (void)savePDF
{
NSData *data = [_webView converToPDF]; 調用上面的方法
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/testFile.pdf"]];
BOOL result = [data writeToFile:path atomically:YES];
[MBProgressHUD hideHUD];
if (result) {
"保存成功"
}else{
"保存失敗";
}
從本地獲取路徑進行顯示PDF
NSURL *pdfURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:pdfURL];
[self.webView setScalesPageToFit:YES];
[self.webView loadRequest:request];
}
接著從本地打開就ok了.