我正在尝试在我的应用中合并两个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];
}
}
答案 0 :(得分:1)
我认为这是你的documentsDirectory
变量未设置正确。检查它是如何获得它的价值的。但是ers/msg-surans/
看起来不正确。
应该是这样的:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];