在UIImage中清楚地显示pdf生成的缩略图

时间:2013-12-17 11:06:24

标签: ios iphone objective-c uiimage pdf-generation

我为pdf file.so创建了缩略图。每当用户点击任何一个缩略图时,它应该全屏显示。所以我使用了UIImageView来显示它。问题是那个。而不是显示{{0} }

但它显示的内容并不清楚......

i need to display like this

我用来显示的代码是

(void) displayPdf
{

CGFloat width = 60.0;

    NSLog(@"%d",i);

        //UIImage* thumbnailImage;

    NSLog(@"%@",fileName);

//        NSString*fileName= @"2_slo_sample";

        NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"pdf"];

        NSURL* pdfFileUrl = [NSURL fileURLWithPath:path];

        CGPDFPageRef page;

    CGRect pageRect = CGRectMake(0, 0, 150,150);

    CGFloat pdfScale = width/pageRect.size.width;

    pageRect.size = CGSizeMake(pageRect.size.width*pdfScale, pageRect.size.height*pdfScale);

    pageRect.origin = CGPointZero;

        UIGraphicsBeginImageContext(pageRect.size);

        CGContextRef context = UIGraphicsGetCurrentContext();

        CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfFileUrl);

        //NSUInteger totalNum = CGPDFDocumentGetNumberOfPages(pdf);


           CGContextSaveGState(context);

    CGContextTranslateCTM(context, 0.0, pageRect.size.height);

    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextSetGrayFillColor(context, 1.0, 1.0);

    CGContextFillRect(context, pageRect);

    // Grab the first PDF page
    page = CGPDFDocumentGetPage(pdf, i);

    CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, pageRect, 0, false);
    // And apply the transform.
    CGContextConcatCTM(context, CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, pageRect, 0, true));

    CGContextDrawPDFPage(context, page);

    // Create the new UIImage from the context
    thumbnailImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();    
    CGPDFDocumentRelease(pdf);

    //webView.hidden = YES;
    imageView1 = [[UIImageView alloc] init];
    imageView1.frame =CGRectMake(0, 50, 280, 280);
    [imageView1 setContentMode:UIViewContentModeScaleAspectFit];
    [imageView1 setNeedsDisplay];
    imageView1.backgroundColor = [UIColor clearColor];
    [imageView1 setUserInteractionEnabled:YES];
        imageView1.image = thumbnailImage;
    [self.view addSubview:imageView1];
}

请帮助我,以便我能清楚地显示它。

提前致谢

1 个答案:

答案 0 :(得分:1)

您正在从pdf页面创建一个imageview。这一切都很好,花花公子,但我认为你是用小缩略图大小创建这个图像然后,当你想要的时候,你将该图像调整为全屏。这就像常见的CSI错误(增强,增强,增强......)。由于您使用有限的尺寸创建了图像视图,因此您不仅可以增加图像视图的大小,还可以自动显示像素清晰度。

您有两种不同的选择:

您可以将缩略图设为整页大小,然后将其缩小到缩略图大小(这会占用大量内存,可能会因为PDF格的大小而过多)。

当尺寸发生变化时,您可以重新创建imageview的图像(这将需要大量的处理能力并且可能会使UI陷入困境,从而导致烦恼)。

或者您可以在自定义UIView的drawRect:函数中绘制pdf。这个是最常见的(从我读过的)。然后,当您更改UIView的大小以使其全屏时,您所要做的就是将其告诉setNeedsDisplay。对于此选项的一个非常好的代码示例,我建议您查看PDFKitten。它可能比您正在寻找的更深入,但它对我有很大帮助。