1

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!!!

ajay
  • 3,245
  • 4
  • 31
  • 59
  • possible duplicate of [Display PDF on iPad](http://stackoverflow.com/questions/4722526/display-pdf-on-ipad) – outis Jan 31 '11 at 07:30
  • You can see the link,I think this may be useful for you--[link text](http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html#//apple_ref/doc/uid/TP30001066-CH214-TPXREF109) – iPhoneDv Dec 01 '10 at 06:21
  • can you give the answer for the modified code. – ajay Jan 17 '11 at 04:43

1 Answers1

1

You need to calculate what scale values you need for the page to fit your view. Then put the proper values in your

CGContextScaleCTM(ctx, 1.0, -1.0);

call.

Altealice
  • 3,572
  • 3
  • 21
  • 41
  • @ajay, were you able to write method to calculate the scale values that works in both orientation modes? If so can you please post it as an update in your question? Thanks! – Chris Wagner Jan 04 '11 at 01:04
  • 1
    @Flash84x it is normally a ratio of your page dimensions and the view/frame dimensions where you want to display it, where 100% = 1.0. Should be fairly easy to calculate. – Altealice Jan 04 '11 at 02:45
  • Yeah, it is a simple calculation that I had figured out but for a reason I don't completely understand yet, passing that scale value to `CGContextScaleCTM(ctx, scale, -scale);` results in some undesired results. I had to use `CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scale, scale));` – Chris Wagner Jan 04 '11 at 16:16
  • hi all i modified some code can you please give me some more information.http://stackoverflow.com/questions/4634331/problem-with-rendering-pdf-on-the-entire-screen-of-pdf – ajay Jan 13 '11 at 11:24