近期公司项目需要优化展示PDF发票的功能,之前是直接用UIWebView展示PDF发票数据,印章无法展示出来,所以保存功能也是废的。
刚开始通过文章了解到,使用系统框架QLPreviewController展示PDF发票在iOS13上没有问题,可以展示印章,但是评论区说在iOS10以下,无法展示印章,而且需要做PDF文件本地缓存,步骤比较繁琐,所以打算另辟蹊径。
果不其然,一番折腾后,发现让后台先把PDF发票的数据转为base64图片,再返回给前端展示,这个方案可行。
最终iOS这边选择用以下方式展示base64编码的图片
// 这里的变量 dataURIStr 形如字符串 ,dataURLStr:base64编码图片@"data:image/png;base64,iVBORw0KGgoAy ... RK5CYII="
NSURL *imgURL = [NSURL URLWithString:dataURIStr];
NSData *imgData = [NSData dataWithContentsOfURL:imgURL];
UIImage *img = [UIImage imageWithData:imgData];
还有一种展示方案如下,该方法不需要拼接前缀格式,比较方便。
// 这里的变量 base64ImgStr 形如字符串 @"iVBORw0KGgoAy ... RK5CYII=",即图片经 base64 编码后所得的字符串
NSData *imgData = [[NSData alloc] initWithBase64EncodedString:base64ImgStr options:0];
UIImage *img = [UIImage imageWithData:imgData];