IOS - PDF合并
阅读原文时间:2023年07月15日阅读:1

#pragma mark - Merge PDF

- (void)mergePDF

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

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

NSString *filePath2 = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"文件.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(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 = (  CFURLRef)CFBridgingRetain([[NSURL alloc] initFileURLWithPath: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;

}