CGPDFDocument масштабирование - PullRequest
       26

CGPDFDocument масштабирование

0 голосов
/ 24 августа 2010

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

Когда я запускаю приложение, PDF масштабируется примерно до 0,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 Ответ

1 голос
/ 26 августа 2010

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

Jk

...