2010-08-23 3 views
0

Je commence tout juste à créer une application qui affichera des documents PDF. J'ai expérimenté, sous-classe UIView et en utilisant le code de la démo de pommes. J'ai un document PDF qui contient une image de 1024 x 748 pixels à 131 ppi, de sorte qu'il DEVRAIT remplir l'écran de l'iPad en mode paysage. Lorsque je lance l'application, le pdf est mis à l'échelle à environ 0,25% de sa taille réelle, centrée sur l'écran de l'iPad. Pourquoi le PDF n'est-il pas affiché en taille réelle?CGPDFDocument mise à l'échelle

code de mon UIView personnalisé:

-(id)initWithFrame:(CGRect)frame PDFName:(NSString *)pdfName 
{ 
    self = [super initWithFrame:frame]; 
    if(self != nil) 
    { 
     self.backgroundColor = [UIColor blueColor]; 
     self.opaque = YES; 
     self.clearsContextBeforeDrawing = YES; 

     CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)pdfName, NULL, NULL); 
     pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL); 
     CFRelease(pdfURL); 
    } 

    return self; 
} 


- (void)drawRect:(CGRect)rect { 

    // PDF page drawing expects a Lower-Left coordinate system, so we flip the coordinate system 
    // before we start drawing. 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 

    // Grab the first PDF page 
    CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1); 

    // We're about to modify the context CTM to draw the PDF page where we want it, so save the graphics state in case we want to do more drawing 
    CGContextSaveGState(context); 
    // CGPDFPageGetDrawingTransform provides an easy way to get the transform for a PDF page. It will scale down to fit, including any 
    // base rotations necessary to display the PDF page correctly. 
    CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, self.bounds, 0, true); 
    // And apply the transform. 
    CGContextConcatCTM(context, pdfTransform); 
    // Finally, we draw the page and restore the graphics state for further manipulations! 
    CGContextDrawPDFPage(context, page); 
    CGContextRestoreGState(context); 

} 

Répondre

1

réponse était facile. Changé le ppi de l'image dans le PDF à 72 ppi (encore 1024 x 748). Maintenant, il remplit l'écran correctement. Je pensais que je devais correspondre à la densité de pixels de l'iPad, mais je suppose que non.

Jk

+0

PPI n'a rien à voir avec cela. Les chances sont que votre résolution PDF initiale était la boîte de délimitation normale de 612 × 792. Changer la limite de l'image fixe le problème pour un PDF, mais la vraie réponse repose sur le changement des valeurs de la transformation pdf, ou étirement/mise à l'échelle de la vue pdf ou la super vue. – J2theC