iOS_PDF文件合并

  • PDF文件合并
// 返回值为合并后的pdf文件路径,存储在沙盒内
- (NSString *)mergePDFFiles:(NSArray *)listOfPaths {
    // File paths
    NSString *fileName = [NSString stringWithFormat:@"合并后的文件%d.pdf",arc4random_uniform(100)];

    NSString *pdfPathOutput = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:fileName];

    CFURLRef pdfURLOutput = (CFURLRef)CFBridgingRetain([NSURL fileURLWithPath:pdfPathOutput]);

    NSInteger numberOfPages = 0;
    // Create the output context
    CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL);

    for (NSString *source in listOfPaths) {
        CFURLRef pdfURL = nil;
        if ([source containsString:@"http"]) {
            NSURL *url = [[NSURL alloc] initWithString:source];
            pdfURL = (CFURLRef)CFBridgingRetain(url);
        }else{
            pdfURL = (CFURLRef)CFBridgingRetain([[NSURL alloc] initFileURLWithPath:source]);
        }
    
        CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL);
        numberOfPages = CGPDFDocumentGetNumberOfPages(pdfRef);
        
        CGPDFPageRef page;
        CGRect mediaBox;

        for (int i=1; i<=numberOfPages; i++) {

            page = CGPDFDocumentGetPage(pdfRef, i);

            mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);

            CGContextBeginPage(writeContext, &mediaBox);

            CGContextDrawPDFPage(writeContext, page);

            CGContextEndPage(writeContext);
        }
        CGPDFDocumentRelease(pdfRef);
        CFRelease(pdfURL);
    }

    CFRelease(pdfURLOutput);

    // Finalize the output file

    CGPDFContextClose(writeContext);

    CGContextRelease(writeContext);

    return pdfPathOutput;

}

你可能感兴趣的:(Objective-C)