在iOS中合并2个pdf文件

我想在iOS中合并两个PDF文件。 我正在逐页合并。 非常大的文件需要很多时间。 有什么办法,我们可以合并这两个文件,而不是逐页?

如果你愿意,我可以发布我的代码。

我的代码是相似的在这里

试试这个代码..然后加上第一个pdf文件,它添加第二个pdf文件使单个pdf。

NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; // File paths NSString *pdfPath1 = [[NSBundle mainBundle] pathForResource:@"pdf1" ofType:@"pdf"]; NSString *pdfPath2 = [cacheDir stringByAppendingPathComponent:@"temp.pdf"]; NSString *pdfPathOutput = [cacheDir stringByAppendingPathComponent:@"out.pdf"]; // File URLs - bridge casting for ARC CFURLRef pdfURL1 = (__bridge_retained CFURLRef)[[NSURL alloc] initFileURLWithPath:(NSString *)pdfPath1];//(CFURLRef) NSURL CFURLRef pdfURL2 = (__bridge_retained CFURLRef)[[NSURL alloc] initFileURLWithPath:(NSString *)pdfPath2];//(CFURLRef) CFURLRef pdfURLOutput =(__bridge_retained CFURLRef) [[NSURL alloc] initFileURLWithPath:(NSString *)pdfPathOutput];//(CFURLRef) // File references CGPDFDocumentRef pdfRef1 = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL1); CGPDFDocumentRef pdfRef2 = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL2); // Number of pages NSInteger numberOfPages1 = CGPDFDocumentGetNumberOfPages(pdfRef1); NSInteger numberOfPages2 = CGPDFDocumentGetNumberOfPages(pdfRef2); // Create the output context CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL); // Loop variables CGPDFPageRef page; CGRect mediaBox; // Read the first PDF and generate the output pages NSLog(@"GENERATING PAGES FROM PDF 1 (%i)...", numberOfPages1); for (int i=1; i<=numberOfPages1; i++) { page = CGPDFDocumentGetPage(pdfRef1, i); mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); CGContextBeginPage(writeContext, &mediaBox); CGContextDrawPDFPage(writeContext, page); CGContextEndPage(writeContext); } // Read the second PDF and generate the output pages NSLog(@"GENERATING PAGES FROM PDF 2 (%i)...", numberOfPages2); for (int i=1; i<=numberOfPages2; i++) { page = CGPDFDocumentGetPage(pdfRef2, i); mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); CGContextBeginPage(writeContext, &mediaBox); CGContextDrawPDFPage(writeContext, page); CGContextEndPage(writeContext); } NSLog(@"DONE!"); // Finalize the output file CGPDFContextClose(writeContext); // Release from memory CFRelease(pdfURL1); CFRelease(pdfURL2); CFRelease(pdfURLOutput); CGPDFDocumentRelease(pdfRef1); CGPDFDocumentRelease(pdfRef2); CGContextRelease(writeContext); 

使用这种方法的任何数量的PDF这可能会帮助你

 + (NSString *)joinPDF:(NSArray *)listOfPath{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *layOutPath=[NSString stringWithFormat:@"%@/mergepdf/pdf",[paths objectAtIndex:0]]; if(![[NSFileManager defaultManager] fileExistsAtPath:layOutPath]){ [[NSFileManager defaultManager] createDirectoryAtPath:layOutPath withIntermediateDirectories:YES attributes:nil error:nil]; } // File paths NSString *fileName = @"ALL.pdf"; NSString *pdfPathOutput = [layOutPath stringByAppendingPathComponent:fileName]; CFURLRef pdfURLOutput = (__bridge CFURLRef)[NSURL fileURLWithPath:pdfPathOutput]; NSInteger numberOfPages = 0; // Create the output context CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL); for (NSString *source in listOfPath) { // CFURLRef pdfURL = (__bridge CFURLRef)[NSURL fileURLWithPath:source]; CFURLRef pdfURL = CFURLCreateFromFileSystemRepresentation(NULL, [source UTF8String],[source length], NO); //file ref CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL(pdfURL); numberOfPages = CGPDFDocumentGetNumberOfPages(pdfRef); // Loop variables CGPDFPageRef page; CGRect mediaBox; // Read the first PDF and generate the output pages DLog(@"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; }