Frequently Asked Question

How to create a thumbnail from a page (iOS)
Last Updated 11 months ago

This article shows how to create a thumbnail of a required page.


- (CGImageRef)getThumbnailFromPage:(NSString *)m_path password:(NSString *)password page:(int)pageno width:(int)thumbWidth height:(int)thumbHeight
{
    PDFDoc *doc = [[PDFDoc alloc] init];    
    if ([doc open:m_path :password] == 0) {
        PDFPage *page = [doc page:pageno];        

        PDF_DIB m_dib = NULL;
        PDF_DIB bmp = Global_dibGet(m_dib, thumbWidth, thumbHeight);        

        float w = [doc pageWidth:pageno];
        float h = [doc pageHeight:pageno];
        float ratiox = thumbWidth/w;
        float ratioy = thumbHeight/h;

        if( ratiox > ratioy ) ratiox = ratioy;        
        PDF_MATRIX mat = Matrix_createScale(ratiox, -ratiox, 0, h * ratioy);
        Page_renderPrepare(page.handle, bmp);
        Page_render(page.handle, bmp, mat, false, 1);
        Matrix_destroy(mat);

        page = nil;        

        void *data = Global_dibGetData(bmp);
        CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, data, thumbWidth * thumbHeight * 4, NULL);
        CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
        CGImageRef imgRef = CGImageCreate(thumbWidth, thumbHeight, 8, 32, thumbWidth<<2, cs, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst, provider, NULL, FALSE, kCGRenderingIntentDefault);        
        CGContextRef context = CGBitmapContextCreate(NULL, thumbWidth, thumbHeight, 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, thumbWidth, thumbHeight), imgRef);        

        // Get your image
        CGImageRef cgImage = CGBitmapContextCreateImage(context);

        // Release
        CGColorSpaceRelease(cs);
        CGDataProviderRelease(provider);

        page = nil;
        doc = nil;                

        return cgImage;
    }
    return nil;
}

Loading ...