2011-11-27 59 views
1

我有一些麻烦,保存PDF页作为UIImage ... PDF从互联网上加载,它有一个页面(原始PDF已拆分断绝)......但有时转换图像裁剪......有时是小,当它在推杆的UIImageView留下的空白......从CGPDfDocument的页面保存图像不完美适合UIImageview

这里是代码

-(UIImage *)imageFromPdf:(NSString *) pdfUrl{ 

NSURL *pdfUrlStr=[NSURL URLWithString:pdfUrl]; 

CFURLRef docURLRef=(CFURLRef)pdfUrlStr; 


UIGraphicsBeginImageContext(CGSizeMake(768, 1024)); //840, 960 
NSLog(@"save begin"); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

//CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("/file.pdf"), NULL, NULL); 

CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL(docURLRef); 

NSLog(@"save complete"); 

CGContextTranslateCTM(context, 0.0, 900);//320 

CGContextScaleCTM(context, 1.0, -1.0); 

CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1); 

CGContextSaveGState(context); 


CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, CGRectMake(0, 0, 768, 1024), 0, true); 

CGContextConcatCTM(context, pdfTransform); 

CGContextDrawPDFPage(context, page); 

CGContextRestoreGState(context); 

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return resultingImage; 

}

btw我已经准备好了我的UIImageview,编码像这样

self.PDFImageVIew.contentMode = UIViewContentModeScaleAspectFit; 
self.PDFImageVIew.clipsToBounds = YES; 

我只是想让这个图像完美地适合UIImageview,并且可能是它降低了图像的质量......你能暗示我怎么能保持质量呢?请帮忙给我一些建议

感谢

回答

1
CGContextTranslateCTM(context, 0.0, 900);//320 
  • 这里一般翻译操作的最后一个参数应当是上下文或您创建图像矩形高度的高度。所以,我认为它应该是1024(你已经采取的图像上下文的高度是1024,所以在这里我假设状态栏不存在)。这可能会消除裁剪问题。还有一些我已经注意到的代码,你应该在上下文操作之前保存图形的状态。你有保存它,但经过几次操作。
  • 上面的代码将尝试使其高度适合,因此如果实际页面的高度大于上下文高度,那么它将被缩小。所以你显然可以看到页面周围的空白。
  • 还有一件事,如果你的原始pdf页有空白,那么就没有办法消除它,据我所知。
+1

谢谢...它适用于高度 我使用CGRect pageRect = CGPDFPageGetBoxRect(page,kCGPDFMediaBox); 而不是任何值...但它仍然有一些空白左右。 –