2014-03-07 41 views
0

我正在嘗試使用CGPDFDocumentRef來顯示pdf。我被困在中間,因爲我不知道是什麼之後還會有工作要做,以顯示我的觀點:是否可以在不使用webview的情況下在單個視圖上顯示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頁面添加到上下文並將其顯示在視圖上?

回答

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; 
} 
+0

在哪裏添加UIview? ViewController已經有一個視圖,然後爲什麼我們必須添加?我們必須重寫rect方法? – user2523879

+0

你需要一個自定義的'UIView'子類。 'drawRect'是UIView類的一個方法,你必須重寫 –

+0

它的工作,謝謝。但如何渲染多頁PDF? – user2523879

1

請注意使用QLPreviewController來代替不使用Web視圖顯示PDF的簡單方法。這個視圖控制器也使分享/打印PDF變得簡單。

+0

被初始化我才知道那Q. LPreviewController在ios 7中不受支持。 – user2523879

+0

真的,沒有聽說過(它會導致很多問題)。你從哪裏學到的? – Wain

+0

我剛剛瀏覽過,並且知道PDF無法在iOS 7中使用QLPreviewController顯示,但我沒有自己嘗試 – user2523879

相關問題