how to edit a PDF in objective-c?

后端 未结 3 1870
名媛妹妹
名媛妹妹 2020-12-05 01:18

i\'m writing an application in objective-c (using cocoa). i have a PDF template, i need to substitute actual values into placeholders in PDF and then save the result into ne

3条回答
  •  南方客
    南方客 (楼主)
    2020-12-05 01:50

    I've found the solution! It connects the power of quartz2d and simplicity of UIGraphics.

    NSString *newFilePath = @"path/to/your/newfile.pdf";
    NSString *templatePath = @"path/to/your/template.pdf";
    
    //create empty pdf file;
    UIGraphicsBeginPDFContextToFile(newFilePath, CGRectMake(0, 0, 792, 612), nil);
    
    CFURLRef url = CFURLCreateWithFileSystemPath (NULL, (CFStringRef)templatePath, kCFURLPOSIXPathStyle, 0);
    
    //open template file
    CGPDFDocumentRef templateDocument = CGPDFDocumentCreateWithURL(url);
    CFRelease(url);
    
    //get amount of pages in template
    size_t count = CGPDFDocumentGetNumberOfPages(templateDocument);
    
    //for each page in template
    for (size_t pageNumber = 1; pageNumber <= count; pageNumber++) {
        //get bounds of template page
        CGPDFPageRef templatePage = CGPDFDocumentGetPage(templateDocument, pageNumber);
        CGRect templatePageBounds = CGPDFPageGetBoxRect(templatePage, kCGPDFCropBox);
    
        //create empty page with corresponding bounds in new document
        UIGraphicsBeginPDFPageWithInfo(templatePageBounds, nil);
        CGContextRef context = UIGraphicsGetCurrentContext();
    
        //flip context due to different origins
        CGContextTranslateCTM(context, 0.0, templatePageBounds.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);
    
        //copy content of template page on the corresponding page in new file
        CGContextDrawPDFPage(context, templatePage);
    
        //flip context back
        CGContextTranslateCTM(context, 0.0, templatePageBounds.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);
    
        /* Here you can do any drawings */
        [@"Test" drawAtPoint:CGPointMake(200, 300) withFont:[UIFont systemFontOfSize:20]];
    }
    CGPDFDocumentRelease(templateDocument);
    UIGraphicsEndPDFContext();
    

提交回复
热议问题