iOS合并pdf文件

时间:2013-04-10 14:00:18

标签: ios pdf-generation

我正在尝试在我的应用中合并两个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 个答案:

答案 0 :(得分:1)

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

应该是这样的:

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