美文网首页iOS在路上iOS
iOS使用pdf.js打开PDF文件

iOS使用pdf.js打开PDF文件

作者: 雪小影 | 来源:发表于2017-05-12 17:46 被阅读4076次

    最近研究了下iOS打开PDF文件的方式,由于项目需要在浏览PDF文件时能使用HTML格式文件,调研了一下iOS中打开PDF文件的几种方式,发现pdf.js开源库可以做到这一点,通过调用js在线预览PDF文件,预览时将PDF文件转为HTML标签,而且集成方便。

    pdf.js是火狐浏览器的开源项目,github地址为:https://github.com/mozilla/pdf.js

    教程中把pdf.js作为服务端的步骤:

    • clone工程到本地:
    $ git clone git://github.com/mozilla/pdf.js.git
    $ cd pdf.js
    
    • 安装node.js,然后安装gulp工具(若已有可跳过):
    $ npm install --global gulp-cli
    
    • 在pdf.js工程目录里执行:
    $ npm install -g gulp-cli
    
    • 安装好gulp之后在源代码使用npm安装模块:
    $ npm install
    
    • 启动gulp构建本地服务器:
    $ gulp server
    

    将pdf.js集成到iOS工程中的步骤:

    • 构建pdf.js:
    $ gulp generic
    
    • 可以看到在如下图目录中有generic文件夹,里面的内容即是我们需要集成到iOS项目中的:


    • generic文件夹大小为8.8MB,如果你觉得把这个文件夹导入到项目中太大了的话,你可以使用如下命令:

    $ gulp minified
    
    • 可以看到在如下图目录中有minified文件夹,大小为8MB:


    • 如果你觉得8MB还是特别大的话,你可以删掉一些文件,只保留最重要的js文件,删除后的文件目录如下图,大小为1.3MB:



    • 上述三种方式得到的目录下的文件即为需要导入到iOS工程中的,如果对文件大小要求苛刻,可以使用删减后的minified目录,如果对文件大小没那么苛刻,可以导入generic,删减后的可能稳定性不如原版本,我在测试的时候发现删减后的目录在连接safari调试的时候会崩溃,其他问题尚未发现;

    • 新建iOS工程,将minified或者generic复制到工程目录中:


    • 拖拽复制的文件目录到工程中,选择folder references(亲测选择groups没有效果,原因未知):


    • 新建PDFWebView继承自UIWebView,添加如下代码:
     - (void)loadPDFFile:(NSString*)filePath {
        _filePath = filePath;
      
        NSString *viwerPath = [[NSBundle mainBundle] pathForResource:@"viewer" ofType:@"html" inDirectory:@"minified/web"];
        NSString *urlStr = [NSString stringWithFormat:@"%@?file=%@#page=1",viwerPath,filePath];
        urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
        [self loadRequest:request];
    }
    
    • 在控制器里添加如下代码:
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        PDFWebView *webView = [[PDFWebView alloc] initWithFrame:self.view.bounds];
        [self.view addSubview:webView];
        NSString *pdfFilePath = [[NSBundle mainBundle] pathForResource:@"git搭建" ofType:@"pdf"];
        [webView loadPDFFile:pdfFilePath];
    }
    

    参考资料

    相关文章

      网友评论

        本文标题:iOS使用pdf.js打开PDF文件

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