2010-12-01 3 views
1

i lesen PDF-Dateien und auch angezeigt passen, ist der Code wie folgt:wie pdf Seite im gesamten Ansicht

- (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]; 

} 

es liest & pdf zeigt genau, aber Problem ist, , es ist nicht für die gesamte Ansicht für jede pdf geeignet, gibt es irgendeine Änderung oder Korrektur in meinem Code.please einige Anregungen und Kommentare. Danke!!!

+0

möglich duplikat von [PDF auf dem iPad anzeigen] (http://stackoverflow.com/questions/4722526/display-pdf-on-ipad) – outis

+0

Sie können den Link sehen, ich denke, dass dies für Sie nützlich sein kann-- [Link Text] (http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/drawingquarz2d/dq_pdf/dq_pdf.html#//apple_ref/doc/uid/TP30001066-CH214-TPXREF109) – iPhoneDv

+0

können Sie Gib die Antwort für den modifizierten Code. – ajay

Antwort

1

Sie müssen berechnen, welche Skalierungswerte Sie für die Seite benötigen, die zu Ihrer Ansicht passt. Stellen Sie dann die richtigen Werte in Ihren Anruf ein.

+0

danke alteralice es funktioniert – ajay

+0

@ajay, konnten Sie Methode schreiben, um die Skalierungswerte zu berechnen, die in beiden Orientierungsmodi funktioniert? Wenn ja, kannst du es bitte als Update in deiner Frage posten? Vielen Dank! –

+1

@ Flash84x ist es normalerweise ein Verhältnis Ihrer Seitenmaße und der Ansicht/Rahmenmaße, wo Sie es anzeigen möchten, wo 100% = 1.0. Sollte relativ einfach zu berechnen sein. – Altealice