iOS merging pdf files

三世轮回 提交于 2019-12-24 16:41:14

问题


I am trying to merge two pdf files in my app. But my app keeps breaking at the point where the combined file reference is created. (See comments in code). Can someone point me in the right direction here? Thanks.

- (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:


I think it's your documentsDirectory variable that isn't set right. Check how it's getting its value. But ers/msg-surans/ doesn't look right.

Should be something like this:

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


来源:https://stackoverflow.com/questions/15928001/ios-merging-pdf-files

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!