2013-04-10 112 views
1

我想在我的应用程序中合并两个pdf文件。但是,我的应用程序在创建组合文件引用的地方不断突破。 (见代码注释)。有人可以在这里指出我正确的方向吗?谢谢。iOS合并pdf文件

- (void) mergerPDFFiles : (NSString*) firstPDFFile : (NSString*) secondPDFFile { 

    //set path to plist to read in docs directory 
    NSString* pdf1Path = [documentsDirectory stringByAppendingPathComponent:firstPDFFile]; 
    NSString* pdf2Path = [documentsDirectory stringByAppendingPathComponent:secondPDFFile]; 

    BOOL hasError = NO; 
    NSMutableString* strErrMsg = [[NSMutableString alloc] init]; 

    //check to see if the file exists 
    if (![fileManager fileExistsAtPath:pdf1Path]) { 
     hasError = YES; 
     [strErrMsg appendString:[NSString stringWithFormat:@"Could not find the PDF just created: %@", firstPDFFile]]; 
    } 

    //check to see if the file exists 
    if (![fileManager fileExistsAtPath:pdf2Path]) { 
     hasError = YES; 
     [strErrMsg appendString:[NSString stringWithFormat:@"Could not find the marketing materials PDF: %@", secondPDFFile]]; 
    } 

    if (!hasError) { 

     NSArray* arrPDFPaths = [[NSArray alloc] initWithObjects:pdf1Path, pdf2Path, nil]; 

     //make a new file name 
     NSArray* arrPDF1Split = [firstPDFFile componentsSeparatedByString:@"."]; 
     NSString* strNewPDF = [NSString stringWithFormat:@"%@_Complete", [arrPDF1Split objectAtIndex:0]]; 

     // File paths 
     NSString* pdfPathOutput = [documentsDirectory stringByAppendingPathComponent:strNewPDF]; 


/******************DIES HERE!***********************************/ 
     CFURLRef pdfURLOutput = (__bridge CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPathOutput]; 
     NSInteger numberOfPages = 0; 
     // Create the output context 
     CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL); 

/********************ERROR MESSAGE****************************** 
CGDataConsumerCreateWithFilename: failed to open `ers/msg-surans/Library/Application Support/iPhone Simulator/6.0/Applications/299DBD9D-738F-49E0-B593-159033DDE39B/Documents/OER_Pro_Cost_Test_Complete' for writing: No such file or directory. 
    ****************************************************************/ 



     //loop through the pdfs 
     for(int i=0; i<arrPDFPaths.count; i++) { 

      //get the file 
      NSString* pdfSource = [arrPDFPaths objectAtIndex:i]; 

      //set a CFURL to the pdf 
      CFURLRef pdfURL = (__bridge CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfSource]; 

      //set a reference to the pdf 
      CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL); 
      numberOfPages = CGPDFDocumentGetNumberOfPages(pdfRef); 

      //set some ivars 
      CGPDFPageRef page; 
      CGRect mediaBox; 

      // Read the first PDF and generate the output pages 
      NSLog(@"GENERATING PAGES FROM PDF (%@)...", pdfSource); 
      for (int x=1; x<=numberOfPages; x++) { 
       page = CGPDFDocumentGetPage(pdfRef, x); 
       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); 

    } else { 

     UIAlertView *alert = [[UIAlertView alloc] 
      initWithTitle: @"Error Merging PDF Files" 
      message: strErrMsg 
      delegate: nil 
      cancelButtonTitle:@"OK" 
      otherButtonTitles: 
     nil]; 
     [alert show]; 
    } 

} 
+1

你是如何设置'documentsDirectory'? – bdesham 2013-04-10 14:05:51

回答

1

我认为这是你的documentsDirectory变量设置不正确。检查它如何获得它的价值。但是ers/msg-surans/看起来不正确。

应该是这样的:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0];