PDF-Scrollview - 以横向格式显示PDF文档

时间:2011-09-04 13:05:15

标签: iphone pdf uiscrollview orientation

我正在使用Apple的示例«PDFScrollView»在iPad上显示PDF。只要PDF文档处于纵向模式,这样就可以正常工作。 但是,当文档处于横向模式时,文档始终显示为旋转90度。 我找到了这个How to detect the orientation of a PDF document in iPhone SDK - 但是当我试图获得PDF的尺寸时,无论PDF有什么方向,高度总是大于宽度......

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

如上所述,CGPDFPageGetBoxRect(page, kCGPDFMediaBox)始终为PDF返回相同的大小,无论PDF的方向如何。

但正确返回页面的旋转。

所以我使用这段代码获得轮换:

rotate =  CGPDFPageGetRotationAngle(page);

然后使用我在此处找到的代码:http://ipdfdev.com/2011/03/23/display-a-pdf-page-on-the-iphone-and-ipad/

switch (rotate) {
        case 0:
            // Translate the origin of the coordinate system at the 
            // bottom left corner of the page rectangle.
            CGContextTranslateCTM(context, 0, cropBox.size.height);
            // Reverse the Y axis to grow from bottom to top.
            CGContextScaleCTM(context, 1, -1);
            break;
        case 90:
            // Reverse the Y axis to grow from bottom to top.
            CGContextScaleCTM(context, 1, -1);
            // Rotate the coordinate system.
            CGContextRotateCTM(context, -M_PI / 2);
            break;
        case 180:
        case -180:
            // Reverse the Y axis to grow from bottom to top.
            CGContextScaleCTM(context, 1, -1);
            // Translate the origin of the coordinate system at the 
            // top right corner of the page rectangle.
            CGContextTranslateCTM(context, cropBox.size.width, 0);
            // Rotate the coordinate system with 180 degrees.
            CGContextRotateCTM(context, M_PI);
            break;
        case 270:
        case -90:
            // Translate the origin of the coordinate system at the 
            // bottom right corner of the page rectangle.
            CGContextTranslateCTM(context, cropBox.size.height, cropBox.size.width);
            // Rotate the coordinate system.
            CGContextRotateCTM(context, M_PI / 2);
            // Reverse the X axis.
            CGContextScaleCTM(context, -1, 1);
            break;
    }

Etvoilà - PDF以正确的方向显示

答案 1 :(得分:1)

我写这篇文章时假设您的问题是关于当用户旋转设备时旋转文档.... 为此,您必须在视图中重绘文档。要做到这一点......

  1. 更改绘制文档的视图的框架,并使用以下方法在该视图中使用CALayer(OR CATiledLayer)。 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

  2. 更改框架后调用CATiledLayer的setNeedsDisplay方法。

  3. 然后返回YES - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

  4. 以上步骤将在您的新框架中重新绘制文档相应地查看以使其正确显示。

    - >如果您的观看次数是全屏,那么只有第2步和第3步就足够了。

    如果需要进一步的帮助,请在此处发布....

答案 2 :(得分:1)

您自己绘制PDF是否有特殊原因?您可以在iOS 4.0或更高版本上使用QLPreviewController,在以前的版本中使用UIDocumentInteractionController