2011-11-27 26 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); 而不是任何值...但它仍然有一些空白左右。 –