把UIImage转成PDF进行保存

问题

最近有个场景,需要把H5传递过来的base64保存为PDF文件,经解析,H5是直接把png转base64,保存下来的文件就算是重命名为【xxx.pdf】,依然还是没法在【文件.app】中打开,只能把base64转成UIImage,再通过绘制PDF来进行保存

解决方案

  1. 先把base64Str转成UIImage
UIImage * imgForBase64 = [UIImage imageFromBase64ToWithStr:self.base64Data];

/// base64str->Image
+ (UIImage *)imageFromBase64ToWithStr:(NSString *)str{
    
    NSString *base64Str = [str copy];
    if ([base64Str containsString:@"data:image/jpeg;base64,"]) {
        base64Str = [base64Str stringByReplacingOccurrencesOfString:@"data:image/jpeg;base64," withString:@""];
    }else if ([base64Str containsString:@"data:image/png;base64,"]) {
        base64Str = [base64Str stringByReplacingOccurrencesOfString:@"data:image/png;base64," withString:@""];
    }
    if (kStringIsEmpty(base64Str)) {
        return nil;
    }
    NSData *decodeData = [[NSData alloc]initWithBase64EncodedString:base64Str options:NSDataBase64DecodingIgnoreUnknownCharacters];
    UIImage *image = [[UIImage alloc]initWithData:decodeData];
    return image;
}
  1. 创建文件名和保存目录
///文件夹根目录
    NSString * localFileDirectory = [PATH_OF_DOCUMENT stringByAppendingPathComponent:@"/PDF"];
    
    NSFileManager *fileManger = [NSFileManager defaultManager];
    //  创建文件夹目录
    if (![[NSFileManager defaultManager] contentsOfDirectoryAtPath:localFileDirectory error:nil]) {
        [fileManger createDirectoryAtPath:localFileDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    }
    //  创建文件路径
    NSString *fileNamePath = [localFileDirectory stringByAppendingPathComponent:self.fileName];
  1. 开始绘制PDF
 // 绘制PDF
    CGRect frame = CGRectMake(0, 0, imgForBase64.size.width, imgForBase64.size.height);
    // Create the PDF context using the default page size of 612 x 792.
    UIGraphicsBeginPDFContextToFile(fileNamePath, CGRectZero, nil);
    // Mark the beginning of a new page.
    UIGraphicsBeginPDFPageWithInfo(frame, nil);
    [imgForBase64 drawInRect:frame];
    // Close the PDF context and write the contents out.
    UIGraphicsEndPDFContext();
  1. 输出保存目录【fileNamePath】
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,801评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,795评论 1 32
  • 1、改变 UITextField 占位文字 颜色和去掉底部白框 [_userName setValue:[UICo...
    i_MT阅读 4,681评论 0 2
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,276评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 11,803评论 0 2