Knowledge Base - Convert PDF to images and bitmaps (iOS)

This code shows how to convert all the pages from a PDF file in respective bitmaps on iOS devices.

/**

 * converts the given document into images.

 *

 * @param filePath the input document's path

 * @param password the document's password (if-any)

 * @param savePath the path to save the images into

 * @param size the largest side(width or height), to be used to calculate the image size (0 to use original pdf's dimension)

 * @param startIndex the index (0 to page count - 1) of the first page to generate.

 * @param endIndex the index (0 to page count - 1 inclusive) of the last page to generate.

 * @param type the type of the generated image, 0: jpeg, otherwise:png

 * @return 0: for success

 *        -1:need input password

 *        -2:unknown encryption

 *        -3:damaged or invalid format

 *        -4:unsatisfied link error

 *        -10:access denied or invalid file path

 *        others:unknown error

 */

 

- (int)pdf2image:(NSString *)filePath :(NSString *)password :(NSString *)savePath :(int)size :(int)startIndex :(int)endIndex :(int)type

{

    int result = 0;

    

    Global_setAnnotTransparency(0);

    

    PDFDoc *document = [[PDFDoc alloc] init];

    result = [document open:filePath :password];

    

    if (result == 0) { // Success

        int numOfPages = document.pageCount;

        

        if (startIndex < 0 || startIndex >= numOfPages) startIndex = 0;

        if (endIndex <= 0 || endIndex >= numOfPages) endIndex = numOfPages - 1;

        

        NSString *mFileName = [[filePath lastPathComponent] stringByDeletingPathExtension];

        

        //generate thumbnails

        for(int i = startIndex; i <= endIndex; i++) {

            NSLog(@"---- start page: %i ----", i);

            @autoreleasepool {

                float pageWidth = [document pageWidth:i];

                float pageHeight = [document pageHeight:i];

                int imageWidth, imageHeight = 0;

                

                if (pageWidth > pageHeight) { //Set the given size, original size otherwise

                    imageWidth = (size == 0) ? pageWidth : size;

                    imageHeight = (pageHeight * imageWidth / pageHeight);

                } else {

                    imageHeight = (size == 0) ? pageHeight : size;

                    imageWidth = (pageWidth * imageHeight / pageHeight);

                }

                

                float ratio = imageWidth / pageWidth;

                float ratioy = imageHeight / pageHeight;

                if( ratio > ratioy ) ratio = ratioy;

                

                imageWidth = pageWidth * ratio;

                imageHeight = pageHeight * ratio;

                

                PDFPage *page = [document page:i];

                if (page != nil) {

                    PDFDIB *bitmap = [[PDFDIB alloc] init:imageWidth :imageHeight];

                    

                    PDFMatrix *mat = [[PDFMatrix alloc] init:ratio :-ratio :(imageWidth - pageWidth * ratio) / 2 :(imageHeight + pageHeight * ratio) / 2];

                    [page renderPrepare:nil];

                    if ([page render:bitmap :mat :1]) {

                        NSString *outputPath = [[savePath stringByAppendingPathComponent:mFileName] stringByAppendingFormat:@"_%i", i];

                        outputPath = [outputPath stringByAppendingPathExtension:(type == 0) ? @"jpeg" : @"png"];

                        

                        void *data = [bitmap data];

                        

                        CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, data, imageWidth * imageHeight * 4, NULL);

                        CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();

                        CGImageRef imgRef = CGImageCreate(imageWidth, imageHeight, 8, 32, imageWidth<<2, cs, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst, provider, NULL, FALSE, kCGRenderingIntentDefault);

                        

                        CGContextRef context = CGBitmapContextCreate(NULL, imageWidth * 1, imageHeight * 1, 8, 0, cs, kCGImageAlphaPremultipliedLast);

                        

                        // Draw

                        

                        CGContextSetAlpha(context, 1);

                        CGContextSetRGBFillColor(context, (CGFloat)0.0, (CGFloat)0.0, (CGFloat)0.0, (CGFloat)1.0 );

                        CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), imgRef);

                        

                        // Get your image

                        

                        CGImageRef cgImage = CGBitmapContextCreateImage(context);

                        

                        CGColorSpaceRelease(cs);

                        CGDataProviderRelease(provider);

                        

                        NSLog(@"---- write page: %i ----", i);

                        

                        if (type == 0) {

                            [[NSFileManager defaultManager] createFileAtPath:outputPath contents:UIImageJPEGRepresentation([UIImage imageWithCGImage:cgImage], 0.9) attributes:nil];

                        } else {

                            [[NSFileManager defaultManager] createFileAtPath:outputPath contents:UIImagePNGRepresentation([UIImage imageWithCGImage:cgImage]) attributes:nil];

                        }

                    }

                    

                    page = nil;

                }

            }

        }

        

        document = nil;

    }

    

    return result;

}

 

 

Applies To

RadaeePDF SDK for iOS

Related Articles

Convert PDF to images and bitmaps (Android and Server)

Details

Created : 2017-08-24 12:11:57, Last Modified : 2017-08-29 12:55:04