WKWebView接入PDF.js过程记录处理总结

简介: 最近用WKWebView读取PDF文件出现字体异常、电子图章不显示的问题,后来查找很多解决方案,最后决定用PDF.js的方式来实现

问题

最近用WKWebView读取PDF文件出现字体异常、电子图章不显示的问题,后来查找很多解决方案,最后决定用PDF.js的方式来实现

解决方案

  1. 参考www.jianshu.com/p/ded81b392… 写了demo能接入PDF,但部分字体在真机上还是接入异常,后来使用
gulp generic-legacy

生成generic-legacy稳定包之后,对Safari进行兼容后,终于能修复字体异常的问题

  1. PDF.js自带顶部工具类功能,如果想要去掉,只能通过修改viewer.css来实现,添加如下代码
div.toolbar {
  display: none;
}
#outerContainer #mainContainer div.toolbar {
    display: none !important; /* hide PDF viewer toolbar */
    opacity: 0.5 !important;
}
#outerContainer #mainContainer #viewerContainer {
    top: 0 !important; /* move doc up into empty bar space */
}
  1. 读取本地PDF文件的方式有两个,一个是初始化接入参数,一个是通过bytes方式动态加载读取 初始化接入参数:
NSString *viwerPath = [[NSBundle mainBundle] pathForResource:@"viewer" ofType:@"html" inDirectory:@"generic/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];

bytes方式动态加载读取:

SBundle mainBundle] pathForResource:@"viewer" ofType:@"html" inDirectory:@"generic/web"];
    NSURL * viwerPathURL = [NSURL fileURLWithPath:viwerPath];
    NSURL * dir = viwerPathURL.URLByDeletingLastPathComponent;
    [self loadFileURL:viwerPathURL allowingReadAccessToURL:dir];
    //动态加载的写法
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSData *data = [NSData dataWithContentsOfURL:filePath];
        NSUInteger len = [data length];
        uint8_t myArray[len];
        [data getBytes:&myArray length:len];
        NSMutableArray<NSString *> *bytes = [NSMutableArray array];
        const uint8_t *rawBytes = data.bytes;
        for (NSUInteger i = 0; i < data.length; i++) {
            [bytes addObject:[NSString stringWithFormat:@"%d", (int)rawBytes[i]]];
        }
        NSString *javaScriptArray = [bytes componentsJoinedByString:@","];
        NSString *strForEvaluate = [NSString stringWithFormat:
                                    @"PDFViewerApplication.open(new Uint8Array([%@]));", javaScriptArray];
        [self evaluateJavaScript:strForEvaluate completionHandler:^(id Result, NSError * _Nullable error) {
            if (error)
            {
                NSLog(@"This is error....%@",error.description);
            }
            else if(Result)
            {
                NSLog(@"+++%@",Result);
            }
        }];
    });


目录
相关文章
|
8月前
|
缓存 移动开发 JavaScript
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
427 1
|
8月前
|
移动开发 JavaScript iOS开发
WKWebView和js互调方法的实现
WKWebView和js互调方法的实现
60 0
|
存储 移动开发 JavaScript
Swift WKWebView JS 和 Native 交互(下)
Swift WKWebView JS 和 Native 交互(下)
247 0
|
安全
WKWebView加载PDF屏蔽长按功能弹框
近期有个需求,需要在WKWebView加载PDF中,基于安全的理由,屏蔽【复制、选择全部】等功能弹窗
178 0
|
移动开发 JavaScript Swift
Swift WKWebView JS 和 Native 交互(中)
Swift WKWebView JS 和 Native 交互(中)
221 0
|
移动开发 JSON JavaScript
Swift WKWebView JS 和 Native 交互(上)
Swift WKWebView JS 和 Native 交互(上)
1036 0
|
JavaScript Android开发 iOS开发
|
JavaScript Android开发 数据格式
WKWebView与JS交互
APP有时会套一个网页在里面,此时Native与网页JS进行通信也是经常要用的到的。贴上小小的粟子 let configuration = WKWebViewConfiguration() configuration.
2186 0
|
9天前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
56 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
1月前
|
人工智能 文字识别 数据挖掘
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
MarkItDown 是微软开源的多功能文档转换工具,支持将 PDF、PPT、Word、Excel、图像、音频等多种格式的文件转换为 Markdown 格式,具备 OCR 文字识别、语音转文字和元数据提取等功能。
247 9
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式

热门文章

最新文章