проблема с рендерингом pdf на весь экран pdf - PullRequest
0 голосов
/ 08 января 2011

Привет всем, я пытался разными способами напечатать PDF в соответствии с размером книги PDF. Я также искал во многих ссылках и во многих кодах, таких как коды Apple, GitHub и многие другие сайты такого типа, но безрезультатно. Этот вопрос дублирует многие вопросы и ответы, но все же я не получил точный результат. Мой код выглядит так

  • (void) drawLayer: (CALayer *) слой inContext: (CGContextRef) ctx {
    if (UIInterfaceOrientationIsPortrait ([self interfaceOrientation])) { layer.backgroundColor = [UIColor blackColor]; myPageRef = CGPDFDocumentGetPage (myDocumentRef, c);

    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;
        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)); 
    CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));
    CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(myPageRef, kCGPDFCropBox, layer.bounds, 0, true));
    
    
    CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); 
    CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
    CGContextDrawPDFPage(ctx, myPageRef);
    

    }

Я вставил весь код, который я пробовал в drawlayer. Я дал много случайных чисел, чтобы они уместились на весь экран, и в итоге я получил только восемь книг (pdfs).

Моя цель - распечатать любой PDF-файл с полным покрытием экрана ipad. мой результат получен только за несколько файлов pdf. Может ли кто-нибудь сказать мне точную причину, по которой это происходит, а также сообщить мне точный код для печати pdf на весь экран ipad.

спасибо всем.

Ответы [ 3 ]

1 голос
/ 08 января 2011

Страницы в файлах PDF не имеют стандартного размера.А поскольку вы вычисляете масштаб для сохранения правильного соотношения сторон, не все ваши PDF-файлы будут занимать весь экран.

На основе приведенного выше кода вы можете сделать так, чтобы все PDF-файлы помещались на весь экран,изменение

CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));

на

CGContextConcatCTM(ctx, CGAffineTransformMakeScale(xScale, yScale));

Однако это ухудшит соотношение сторон.

0 голосов
/ 23 февраля 2011

Существует простой способ чтения PDF в iPhone / iPad: 1. Выберите один UIwebView (имя: pdfView). 2. Подключите к нему Iboutlet и делегируйте его в FilesOwner. 3.В Viewdidload

.

[self.pdfView loadRequest: [NSURLRequest requestWithURL: [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource: @ "ObjC" ofType: @ "pdf"]]]];

4.ObjC.pdf должен находиться в папке ресурсов. Теперь, чтобы разместить PDF-страницу другого размера на экране iPad, просто откройте соответствующий файл .xib, затем перейдите в инспектор UIwebView, затем откройте атрибуты веб-просмотра и отметьте галочкой. масштабирует страницу, чтобы соответствовать варианту.

0 голосов
/ 11 января 2011

Почему бы просто не использовать UIDocumentInteractionController для отображения PDF?Было бы намного проще, чем пытаться сделать PDF таким, какой вы есть?Я использовал UIDocumentInteractionController в нескольких случаях для предварительного просмотра PDF-файлов, документов Word, точек питания и т. Д.

Проверьте это ЗДЕСЬ.

Это может дать вам то, что вам нужновесь экран с PDF).Это также позволит вам распечатать документ и открыть его в другом приложении, если это необходимо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...