2010-08-23 4 views
0

Я только начинаю создавать приложение, которое будет отображать документы PDF. Я экспериментировал, подклассифицировал UIView и использовал код из демонстрации Apples. У меня есть документ в формате PDF, который содержит изображение размером 1024 x 748 пикселей при 131 ppi, так что ему ДОЛЖНО заполнять экран iPad в альбомной ориентации.CGPDFDocument scaling

Когда я запустил приложение, формат pdf масштабируется примерно до 25% от его полного размера, в центре экрана iPad. Почему PDF не отображается в полном размере?

код из моего пользовательского UIView:

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

} 

ответ

1

Ответ был прост. Изменен ppi изображения в формате PDF до 72 ppi (по-прежнему 1024 x 748). Теперь он правильно заполняет экран. Я думал, что мне нужно сопоставить плотность пикселей iPads, но я думаю, нет.

Jk

+0

PPI не имеет к этому никакого отношения. Скорее всего, исходное разрешение PDF было нормальным ограничивающим полем 612 × 792. Изменение ограничения изображения фиксирует проблему для одного PDF, но реальный ответ заключается в изменении значений преобразования PDF или растягивании/масштабировании вида pdf или супер-вид. – J2theC