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;
}
RadaeePDF SDK for iOS
Convert PDF to images and bitmaps (Android and Server)
Created : 2017-08-24 12:11:57, Last Modified : 2017-08-29 12:55:04