Похоже, ваш код предполагает, что в каждом документе есть только одна страница, однако он запрашивает страницу pageNumber
для каждого файла при его открытии, и поэтому запрашивает страницу 1 из page_1.pdf, страница 2.из page_2.pdf, стр. 3 из page_3.pdf и т. д. *
Если вы хотите, чтобы первая страница каждого документа была изменена, то:
CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);
на:
CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, 1);
Для чего бы это ни стоило, я переписал вашу рутину, прежде чем заметил ее на основе того, что у меня уже есть (извините, но это в проекте ARC, так что вам придется заново выполнять управление памятью) следующим образом:
(ПРИМЕЧАНИЕ. Проверка ошибок была удалена, чтобы сделать код более читабельным!)
-(void)mergeDocuments {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *oldFilePath=[documentsDirectory stringByAppendingPathComponent:@"finalPdf.pdf"];
NSURL *oldFileUrl = [NSURL fileURLWithPath:oldFilePath];
CGContextRef context = CGPDFContextCreateWithURL((__bridge_retained CFURLRef)oldFileUrl, NULL, NULL);
for (int docNumber = 1; docNumber <= 11; docNumber++)
{
// Get the first page from each source document
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"page_%d.pdf",docNumber]];
NSURL *pdfUrl = [NSURL fileURLWithPath:pdfPath];
CGPDFDocumentRef pdfDoc = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfUrl);
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDoc, 1);
CGRect pdfCropBoxRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
// Copy the page to the new document
CGContextBeginPage(context, &pdfCropBoxRect);
CGContextDrawPDFPage(context, pdfPage);
// Close the source files
CGContextEndPage(context);
CGPDFDocumentRelease(pdfDoc);
}
// Cleanup
CGContextRelease(context);
}