iOS開發(fā) PDF的展示,下載,讀取本地PDF加載

一:URL的讀取,保存,本地讀取保存
1:后臺返回的html的話,去加載這些數(shù)據(jù),進行展示:

        NSURL *url = [NSURL URLWithString:@"URL"];
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
        //[_webView loadHTMLString:_modelArticle.url baseURL:url];
        [_webView loadRequest:request];
        [self addTitleViewWithTitle:_modelArticle.title];

        如果加載的url存在,但是后臺需要插入js,去掉廣告之類的
        - (void)webViewDidFinishLoad:(UIWebView *)webView {
          //_modelJs.content  是js代碼
             [_webView stringByEvaluatingJavaScriptFromString:_modelJs.content];
              }

2:下面是保存PDF到本地:
//判斷pdf是否存在,如果不存在進行保存
-(BOOL)TxtisFileExist:(NSString *)fileName {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSString *filePath = [path stringByAppendingPathComponent:fileName];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL result = [fileManager fileExistsAtPath:filePath];
NSLog(@"這個文件已經(jīng)存在:%@",result?@"是的":@"不存在");
return result;
}
3:保存數(shù)據(jù)
需要UIWebView的擴展類進行存儲轉(zhuǎn)NSdata

import "UIWebView+ConverToData.h"

@implementation UIWebView (ConverToData)

  • (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;
    }

//調(diào)用上面的方法

//注意了,別用漢語名稱去保存,可以用唯一標識進行保存

    NSData *data = [_webView converToPDF];
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@.pdf",[self transform:strName]]];
    BOOL result = [data writeToFile:path atomically:YES];
    if (result) {  @"下載成功"}

4:如果保存下來后直接進行讀取本地PDF
如果存在: 調(diào)用下面的代碼 記住你傳過的名字 然后進行UIWeView加載就OK了

  • (void)readPDF:(NSString *)str
    {
    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *imageFilePath = [filePath stringByAppendingPathComponent:str];
    NSURL *urlttt = [NSURL fileURLWithPath:imageFilePath];
    NSURLRequest *request = [NSURLRequest requestWithURL:urlttt];
    [_webView loadRequest:request];
    }

二:后臺數(shù)據(jù)是PDF文件如何操作

//這個是下載后臺返回的pdf文件進行下載
//首先是判斷文件的存沒有存在,然后進行數(shù)據(jù)的下載或者讀取

  • (void)download:(NSString *)strurl path:(NSString *)pathName
    {
    if (![self TxtisFileExist:[NSString stringWithFormat:@"%@.pdf",pathName]]) {
    NSString *urlString = strurl;
    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

      NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
          
      } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
          NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
          NSString * documentsDirectory = [paths lastObject];
          NSString * path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.pdf",[self transform:pathName]]];
          
          return [NSURL fileURLWithPath:path];
      } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
          
          if (error == nil) {
             [self.view showToastMessage:@"下載成功"];
          }else{
              [self.view showToastMessage:@"下載失敗,請檢查網(wǎng)絡或者PDF文件過大"];
              [self addRefreshButton:self.view refreshBlock:^{}];
          }
      }];
      [task resume];
    

    }else{

      NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
      NSString *imageFilePath = [filePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.pdf",[self transform:pathName]]];
      NSURL *urlttt = [NSURL fileURLWithPath:imageFilePath];
      NSURLRequest *request = [NSURLRequest requestWithURL:urlttt];
      [_webView loadRequest:request];
    

    }
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容