是否可以在不使用webview的情况下在单个视图上显示pdf?

时间:2014-03-07 13:35:17

标签: ios pdf

我正在尝试使用CGPDFDocumentRef显示pdf。我被卡在中间,因为我不知道在那之后需要做什么才能显示在我的观点上:

MyViewController.m:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"TestPage" withExtension:@"pdf"];

    CGPDFDocumentRef PDFDocument = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfURL);
    CGPDFPageRef PDFPage = CGPDFDocumentGetPage(PDFDocument, 1);
}

必须将PDF页面添加到上下文中。我提到了一些代码,但我不明白如何将pdf页面添加到上下文并在视图中显示它?

2 个答案:

答案 0 :(得分:1)

使用QLPreviewController来代替显示没有网页视图的PDF的简单方法。此视图控制器还使PDF共享/打印变得简单。

答案 1 :(得分:0)

您必须创建UIView子类并覆盖drawRect

-(void)drawRect:(CGRect)rect
{
    CGPDFPageRef page = CGPDFDocumentGetPage(document, currentPage);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSaveGState(ctx);
    CGContextTranslateCTM(ctx, 0.0, [self bounds].size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, [self bounds], 0, true));
    CGContextDrawPDFPage(ctx, page);    
    CGContextRestoreGState(ctx);
}

documentcurrentPage

的位置
CGPDFDocumentRef document;
int currentPage; 

可以在initWithFrame

中初始化
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor = [UIColor whiteColor];
        NSString *pathToPdfDoc = [[NSBundle mainBundle] pathForResource:@"aa" ofType:@"pdf"];
        NSURL *pdfUrl = [NSURL fileURLWithPath:pathToPdfDoc];
        document = CGPDFDocumentCreateWithURL((CFURLRef)pdfUrl);
        currentPage = 1;
        totalPages = (int)CGPDFDocumentGetNumberOfPages(document);

    }
    return self;
}