我阅读pdf文件并显示,代码如下:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
NSLog(@"the layer height %d, %d,%d ,%d",layer.bounds.size.width,layer.bounds.size.height,layer.bounds.origin.x,layer.bounds.origin.y);
int c=[currentPage intValue]+1;
NSLog(@"drawing started");
if(UIInterfaceOrientationIsPortrait([self interfaceOrientation])){
layer.backgroundColor=[UIColor blackColor];
myPageRef = CGPDFDocumentGetPage(myDocumentRef, c);
NSLog(@"draw layer");
CGSize pageSize = [kbDataSource pageSize];
GLogInfo(@"the page ize we are getting in draw layer is %@ ",NSStringFromCGSize(pageSize));
//CGContextSaveGState(ctx);
CGSize aspectFitSize = [self getPageFitSizeOfSize:pageSize inSize:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height- __TOP_BRANDING_BAR_HEIGHT)];
CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx));
GLogDebug(@"aspect fitsize of image to %@", NSStringFromCGSize(aspectFitSize));
NSLog(@"layer bounds are:%@ %@ ",NSStringFromCGSize(layer.bounds.size),NSStringFromCGPoint(layer.bounds.origin));
NSLog(@"page size of the book is:%@",NSStringFromCGSize(pageSize));
CGFloat aspectRatio=pageSize.width/pageSize.height;
/*
if (aspectRatio>0.5 && aspectRatio<=0.74) {
NSLog(@"aspect ratio is between 0.5 and 0.74");
CGContextTranslateCTM(ctx,-110 ,layer.bounds.size.height+100);
CGContextScaleCTM(ctx, 1.28,-1.22);
}
else
if (aspectRatio>0.74 && aspectRatio<1) {
NSLog(@"aspect ratio is between 0.75 and 1");
//CGContextTranslateCTM(ctx, -145,layer.bounds.size.height+85);
//CGContextScaleCTM(ctx, 1.4,-1.2);
CGContextTranslateCTM(ctx, -130,layer.bounds.size.height+75);
CGContextScaleCTM(ctx, 1.35,-1.18);
}
else if(aspectRatio>1) {
NSLog(@"aspect ratio is above 1");
CGContextTranslateCTM(ctx,-80,layer.bounds.size.height+80);
CGContextScaleCTM(ctx, 1.2,-1.2);
}
else {
CGContextTranslateCTM(ctx, 0, layer.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
}*/
/*
CGFloat scalingRatio;
if ((layer.bounds.size.width/pageSize.width)<((layer.bounds.size.height-41)/pageSize.height)){
scalingRatio=layer.bounds.size.width/pageSize.width;
}
else {
scalingRatio=(layer.bounds.size.height-41)/pageSize.height;
}
*/
CGRect cropBox = CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox);
CGRect targetRect = layer.bounds;
CGFloat xScale = targetRect.size.width / cropBox.size.width;
CGFloat yScale = (targetRect.size.height-41) / cropBox.size.height;
CGFloat scaleToApply = (xScale < yScale) ? xScale : yScale;
CGContextTranslateCTM(ctx, 0.0, -41+layer.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
NSLog(@"the crop box values are %@",NSStringFromCGRect(cropBox));
NSLog(@"the crop box values are %f",cropBox.origin.x);
NSLog(@"the scaleToApply is %f",scaleToApply);
NSLog(@"the view bounds are %@",[self.view description]);
if (scaleToApply == yScale)
CGContextConcatCTM(ctx, CGAffineTransformMakeTranslation(-100, -150));
else
CGContextConcatCTM(ctx, CGAffineTransformMakeTranslation(-180, -260)); //evans
CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));
CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(myPageRef, kCGPDFCropBox, layer.bounds, 0, true));
//
//CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
CGContextDrawPDFPage(ctx, myPageRef);
//CGContextRestoreGState(ctx);
[loadingIndicator stopAnimating];
[loadingIndicator1 stopAnimating];
[loadingIndicator2 stopAnimating];
}
它读取&amp;完全显示pdf,但问题是,它不适合每个pdf的整个视图,我的代码中是否有任何修改或更正需要。请发布一些建议和评论。谢谢!!!
答案 0 :(得分:1)
您需要计算页面所需的比例值以适合您的视图。然后在
中输入正确的值CGContextScaleCTM(ctx, 1.0, -1.0);
呼叫。