问题
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