簡體   English   中英

如何在整個視圖中容納pdf頁面

[英]how to fit pdf page in entire view

我閱讀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];

}

它准確地讀取並顯示pdf,但問題是,它不適合每個pdf的整個視圖,我的代碼是否需要任何修改或更正。請發表一些建議和評論。 謝謝!!!

您需要計算頁面適合視圖所需的比例值。 然后在您的

CGContextScaleCTM(ctx, 1.0, -1.0);

呼叫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM