在pdf的整个屏幕上渲染pdf的问题

时间:2011-01-08 14:30:41

标签: iphone objective-c ipad

大家好我在很多方面尝试根据pdf book的大小打印pdf.i还搜索了许多链接和许多代码,如苹果代码,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中尝试过的所有代码。我提供了许多随机数字以适应整个页面的页面,最后我只获得了八本书(pdf)。

我的目标是使用整个ipad屏幕打印任何pdf。 我的结果只有少数pdfs.can任何人告诉我它发生的确切原因,并告诉我将PDF格式打印到ipad的整个屏幕的确切代码。

谢谢大家。

3 个答案:

答案 0 :(得分:1)

PDF文件中的页面没有标准尺寸。由于您要计算比例以保持正确的宽高比,因此并非所有PDF文件都会占据整个屏幕。

根据您的上述代码,您可以通过更改

使所有PDF文件适合整个屏幕
CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));

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

但这会搞砸纵横比。

答案 1 :(得分:0)

为什么不使用UIDocumentInteractionController来显示PDF?那么尝试以你的方式呈现PDF会容易得多吗?我在几个实例上使用了UIDocumentInteractionController来预览PDF,word文档,powerpoint等。

查看HERE.

这可能会为您提供所需(使用PDF填充整个屏幕)。它还允许您打印文档并在需要时在另一个应用程序中打开它...

答案 2 :(得分:0)

有一种简单的方法可以在iPhone / iPad上阅读PDF:1。选择一个UIwebView(名称:pdfView)。 2.给Iboutlet连接到它&amp;将它委托给FilesOwner 3.In Viewdidload

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

4.ObjC.pdf应该在资源文件夹中..现在将不同大小的pdf页面安装到iPad的屏幕上,只需打开相应的.xib文件然后转到UIwebView的检查器,然后再查看Web视图属性和刻度标记缩放页面以适应选项。