Add pdf page to an existing pdf objective-c

前端 未结 1 422
盖世英雄少女心
盖世英雄少女心 2021-01-07 03:48

I am writing an app for an iphone/ipad that converts camera image (.png) to pdf and save to the /user/documents folder. Now I\'m trying to figure out how to append another

相关标签:
1条回答
  • 2021-01-07 04:02

    Here is a sample code for appending one pdf over another one:

    // Documents dir
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    
    // File paths
    NSString *pdfPath1 = [documentsDirectory stringByAppendingPathComponent:@"pdf1.pdf"];
    NSString *pdfPath2 = [documentsDirectory stringByAppendingPathComponent:@"pdf2.pdf"];
    NSString *pdfPathOutput = [documentsDirectory stringByAppendingPathComponent:@"pdfout.pdf"];
    
    // File URLs
    CFURLRef pdfURL1 = (CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPath1];
    CFURLRef pdfURL2 = (CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPath2];
    CFURLRef pdfURLOutput = (CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPathOutput];
    
    // File references
    CGPDFDocumentRef pdfRef1 = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL1);
    CGPDFDocumentRef pdfRef2 = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL2);
    
    // Number of pages
    NSInteger numberOfPages1 = CGPDFDocumentGetNumberOfPages(pdfRef1);
    NSInteger numberOfPages2 = CGPDFDocumentGetNumberOfPages(pdfRef2);
    
    // Create the output context
    CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL);
    
    // Loop variables
    CGPDFPageRef page;
    CGRect mediaBox;
    
    // Read the first PDF and generate the output pages
    NSLog(@"Pages from pdf 1 (%i)", numberOfPages1);
    for (int i=1; i<=numberOfPages1; i++) {
      page = CGPDFDocumentGetPage(pdfRef1, i);
      mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
      CGContextBeginPage(writeContext, &mediaBox);
      CGContextDrawPDFPage(writeContext, page);
      CGContextEndPage(writeContext);
    }
    
    // Read the second PDF and generate the output pages
    NSLog(@"Pages from pdf 2 (%i)", numberOfPages2);
    for (int i=1; i<=numberOfPages2; i++) {
      page = CGPDFDocumentGetPage(pdfRef2, i);
      mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
      CGContextBeginPage(writeContext, &mediaBox);
      CGContextDrawPDFPage(writeContext, page);
      CGContextEndPage(writeContext); 
    }
    NSLog(@"Done");
    
    // Finalize the output file
    CGPDFContextClose(writeContext);
    
    // Release from memory
    CFRelease(pdfURL1);
    CFRelease(pdfURL2);
    CFRelease(pdfURLOutput);
    CGPDFDocumentRelease(pdfRef1);
    CGPDFDocumentRelease(pdfRef2);
    CGContextRelease(writeContext);
    

    Source

    0 讨论(0)
提交回复
热议问题