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

教程中把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];

}

运行后效果如图:

20200723更新:

评论很多小伙伴说WKWebview的例子,我更新了github,有需要可以去看看,主要就是fileURL这个东西有点变化,代码在下面:

WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc] init];

[configuration.preferences setValue:@"TRUE" forKey:@"allowFileAccessFromFileURLs"];

PDFWebView *webView = [[PDFWebView alloc] initWithFrame:self.view.bounds configuration:configuration];

[self.view addSubview:webView];

NSURL *pdfFileURL = [[NSBundle mainBundle] URLForResource:@"git.pdf" withExtension:nil];

[webView loadPDFFile:pdfFileURL];

- (void)loadPDFFile:(NSURL*)filePath;

{

_filePath = filePath;

NSString *viwerPath = [[NSBundle mainBundle] pathForResource:@"viewer" ofType:@"html" inDirectory:@"minified/web"];

NSString *urlStr = [NSString stringWithFormat:@"file://%@?file=%@#page=1",viwerPath,filePath];

urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]];

[self loadRequest:request];

}

参考资料

js打开服务器pdf文件,iOS使用pdf.js打开PDF文件相关推荐

  1. python如何打开服务器文件大小,关于字符串:Python可以打开的文件的最大大小?...

    我在python中打开了一个8 MB的文件,因为我想批量更改各种类型的文件名.我检查并将文件加载到一个字符串中,然后使用字符串方法replace替换所有内容.然后我注意到只有一半的文件被替换:就好像p ...

  2. 无法打开服务器性能对象,日志提示:无法打开服务器服务性能对象,如何解决?...

    分享者:iweb2020  阅读量:14322 日志提示:无法打开服务器服务性能对象,如何解决? 小金子目录实践感悟:修改后,有时需要多重启几次,才会生效.计算机具有相对不确定性. DLL" ...

  3. js打开服务器缓存文件夹路径,浅谈微信页面入口文件被缓存解决方案

    缓存对于前端页面来说,是加速页面加载的利器之一,但也同时带来了很多问题,比如新版本发布之后,怎么替换客户端上的缓存文件呢?大家一般的的解决方案主要有以下几种形式, 一般情况 1.添加版本号,在静态资源 ...

  4. ios 与服务器传递文件,iOS开发 如何跨系统传输文件 如:茄子快传、快牙

    0.分析 不管是不是跨平台,利用网络来传输数据,必须先规定好链接方式(网络)和通讯方式(协议). 按照现在的应用场景,分析,其实需要实现的是一个点对点(P2P)交换数据的功能: 网络发现(两个设备相互 ...

  5. js获取服务器响应头信息,请问,js中请求头信息和返回头信息的方法

    $.ajax({ type: 'HEAD', // 获取头信息,type=HEAD即可 url : window.location.href, complete: function( xhr,data ...

  6. 使用PDF.js实现前端和手机端网页预览PDF文件(可定制,支持本地文件、Base64编码和远程URL跨域方式)

    1.插件下载地址:https://mozilla.github.io/pdf.js/ 下载后解压pdfjs-1.10.88-dist.zip文件后得到: 2.把pdfjs-1.10.88-dist放到 ...

  7. 解决uniapp开发微信小程序预览pdf文件ios\安卓兼容问题

    问题 项目需要用uniapp来开发微信小程序,其中,有一个功能是预览pdf, 后台以链接形式返回pdf地址,一开始使用web-view做链接跳转,但是出现ios文件可以正常打开,android打不开的 ...

  8. php ziparc 扩展_请问扩展名为.php.cfg.pdf.rar的文件分别是什么文件用什么软件能够打开...

    请问扩展名为.php.cfg.pdf.rar的文件分别是什么文件用什么软件能够打开 补充说明:请问,扩展名为.php.cfg.pdf.rar的文件分别是什么文件?用什么软件能够打开? 更新时间:201 ...

  9. java打开pdf文件_[原创]java在线打开PDF文档

    步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...

最新文章

  1. Javascript类型转换的规则
  2. CentOS6下yum下载的包存放路径
  3. [开源] .Net orm FreeSql 1.5.0 最新版本(番号:好久不见)
  4. VS Code HtmlFindClass 插件介绍
  5. 安卓案例:利用相对布局实现注册页面
  6. js设置html不可复制,用JS实现用户禁止WEB复制
  7. Python对象引用和del删除引用
  8. 洛谷 1115——最大子段和(线性数据结构)
  9. 计算机代数与密码学,代数曲线与密码学
  10. 如何在VScode中配置python第三方库
  11. Markdown语法介绍(详细)
  12. java微信分享朋友圈_Java实现微信公众平台朋友圈分享功能详细代码
  13. 2022年电子造粒计数器市场前景分析及研究报告
  14. 运维派 企业面试题3 为上题中的 十个随机字母_test.html 文件 更名
  15. nokia 6300手机QQ4.0下载,设置空间支持jar下载
  16. github使用教程linux,GitHub Linux下使用方法
  17. 网络——VRRP、浮动路由(备份路由)
  18. 什么软件去视频水印 拍抖音技巧视频教程
  19. 计算机系vi论文,高校VI形象体系的功能特点-vi设计论文-计算机论文.docx
  20. 数据科学包_Fourth_Chapter

热门文章

  1. 谷粒学院(十七)讲师列表页 | 讲师详情 | 整合阿里云视频点播
  2. 从Android到项目经理再到产品总监
  3. 云扩RPA助力中核财务数字化,迈入高质量发展新阶段
  4. 蓝桥杯 历届试题 5. 错误票据
  5. 怎样做硬盘服务器,怎样做服务器磁盘镜像
  6. Android菜鸟笔记-EditText相关知识整理
  7. 王红梅《算法设计与分析(第3版)》部分课后实验代码
  8. DHCP 和 DHCP防护 配置
  9. day10 基本数据类型及内置方法
  10. Gitlab CI/CD 问题处理