IOS - PDF合并 - 转

来自:http://www.cnblogs.com/tx8899/p/4082749.html

#pragma mark - Merge PDF

 

- (void)mergePDF

{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYES);

    NSString *filePath1 = [[paths objectAtIndex:0stringByAppendingPathComponent:@"阅办卡.pdf"];

    NSString *filePath2 = [[paths objectAtIndex:0stringByAppendingPathComponent:@"文件.pdf"];

    NSArray *PDFURLS = [NSArray arrayWithObjects:filePath1,filePath2, nil];

    

    [self joinPDF:PDFURLS];

}

 

- (NSString *)joinPDF:(NSArray *)listOfPaths {

    // File paths

    NSString *fileName = [NSString stringWithFormat:@"公文%d.pdf",arc4random_uniform(100)];

    NSString *pdfPathOutput = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYES)objectAtIndex:0stringByAppendingPathComponent:fileName];

    

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

    

    NSInteger numberOfPages = 0;

    // Create the output context

    CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULLNULL);

    

    for (NSString *source in listOfPaths) {

        CFURLRef pdfURL = (  CFURLRef)CFBridgingRetain([[NSURL allocinitFileURLWithPath:source]);

        

        //file ref

        CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL);

        numberOfPages = CGPDFDocumentGetNumberOfPages(pdfRef);

        

        // Loop variables

        CGPDFPageRef page;

        CGRect mediaBox;

        

        // Read the first PDF and generate the output pages

        //        NSLog(@"GENERATING PAGES FROM PDF 1 (%@)...", source);

        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;

}

posted @ 2015-09-29 21:23  MokeyChan  阅读(842)  评论(0编辑  收藏  举报