i read pdf files and also displayed, the code is like this:
- (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];
}
it reads & displays pdf exactly, but problem is,it is not fit to entire view for each pdf,is there any modification or correction need in my code.please post some suggestions and comments. thank you!!!
You need to calculate what scale values you need for the page to fit your view. Then put the proper values in your
call.