开发锦集iOS常用iOS 知识收集

iOS图片转PDF+导出

2019-05-06  本文已影响5人  YvanLiu

流程:设置PDF保存路径->将图片转成PDF并存放到设置好的路径->将生成好的PDF转Data使用原生分享功能分享出去。

1、设置PDF保存路径


#pragma mark - 创建PDF储存路径

- (NSString *)createPDFPathWithName:(NSString *)pdfName {
    NSFileManager * fileManager = [NSFileManager defaultManager];

    NSString * finderPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
                                                                  NSUserDomainMask, YES) lastObject]
                             stringByAppendingPathComponent:@"PDF"];
    
    if (![fileManager fileExistsAtPath:finderPath])
    {
        [fileManager createDirectoryAtPath:finderPath withIntermediateDirectories:YES
                                attributes:nil
                                     error:NULL];
    }
    return [finderPath stringByAppendingPathComponent:pdfName];
}

2、生成PDF


#pragma mark - 创建PDF

- (NSString *)createPDF {
    NSString * pdfPath = [self createPDFPathWithName:@"test.pdf"];
 
    // CGRectZero 表示默认尺寸,参数可修改,设置自己需要的尺寸
    UIGraphicsBeginPDFContextToFile(pdfPath, CGRectZero, NULL);
    
    CGRect  pdfBounds = UIGraphicsGetPDFContextBounds();
    CGFloat pdfWidth  = pdfBounds.size.width;
    CGFloat pdfHeight = pdfBounds.size.height;
    
    [self.images enumerateObjectsUsingBlock:^(UIImage * _Nonnull image, NSUInteger idx, BOOL * _Nonnull stop) {
        // 绘制PDF
        UIGraphicsBeginPDFPage();
        
        CGFloat imageW = image.size.width;
        CGFloat imageH = image.size.height;
        
        if (imageW <= pdfWidth && imageH <= pdfHeight)
        {
            CGFloat originX = (pdfWidth - imageW) / 2;
            CGFloat originY = (pdfHeight - imageH) / 2;
            [image drawInRect:CGRectMake(originX, originY, imageW, imageH)];
        }
        else
        {
            CGFloat width,height;

            if ((imageW / imageH) > (pdfWidth / pdfHeight))
            {
                width  = pdfWidth;
                height = width * imageH / imageW;
            }
            else
            {
                height = pdfHeight;
                width = height * imageW / imageH;
            }
            [image drawInRect:CGRectMake((pdfWidth - width) / 2, (pdfHeight - height) / 2, width, height)];
        }
    }];
    
    UIGraphicsEndPDFContext();

    
    return pdfPath;
}

3、分享


#pragma mark - 分享

- (void)shareClick {
    NSString * path = [self createPDF];
    
    NSURL *  file = [NSURL fileURLWithPath:path];
    NSData * data = [NSData dataWithContentsOfFile:path];
    
    UIActivityViewController * activity = [[UIActivityViewController alloc]initWithActivityItems:@[data,file]
                                                                           applicationActivities:nil];
    [self presentViewController:activity animated:YES completion:nil];
    
}

4、demo地址:demo

5、效果图

图一

 


图二
上一篇下一篇

猜你喜欢

热点阅读