2016-03-03 64 views
2

我有一個pdf矢量文件,我想要顯示爲PDF文檔的一部分。我真的不想將其更改爲UIImage文件。我只是覺得這樣做會降低質量。我試圖做的是採取PDF的網址,並將其添加到主要的PDF文件。我已經工作了我的PDF矢量的大小和創建的CGRect如下:是否可以在更大的pdf頁面中繪製pdf矢量圖像?

func drawPDFfromURL(url: NSURL) { 
    guard let document = CGPDFDocumentCreateWithURL(url) else { return nil } 
    guard let page = CGPDFDocumentGetPage(document, 1) else { return nil } 

    let pageRect = CGPDFPageGetBoxRect(page, .MediaBox) 

    let size = pageRect.size 

    pdfImagePageRect = CGRectMake(0, 0, size.width, size.height) 

    print("The size of the pdf is \(size)") 

} 

我當時以爲只是使用以下,但意識到我不能因爲UIImage的目前不支持PDF矢量圖像

let image:UIImage = UIImage(contentsOfFile: fileName2)! 

    image.drawInRect(pdfImagePageRect) 

我只是覺得必須有一種方法可以將PDF矢量圖像插入到pdf文檔中。有什麼建議麼?

回答

2

雖然UIImage的不支持PDF文件,蘋果公司確實提供了一種方法來繪製一個PDF到一個圖形上下文(不管它是什麼):

func CGContextDrawPDFPage(_ c: CGContext?, _ page: CGPDFPage?) 

這將讓你得到你的圖形上下文的您正在編寫PDF,打開第二個PDF文件,獲取對該頁面的引用,並將該頁面呈現到您的PDF上下文中。

唯一困難的部分是您需要設置正確的轉換矩陣,以便您正在呈現的PDF文件被繪製在正確的位置和所需的縮放比例。

也看看這個頁面:https://www.cocoanetics.com/2010/06/rendering-pdf-is-easier-than-you-thought/它顯示瞭如何繪製傳入PDF文件的正確部分。該鏈接的基本代碼是:

// url is a file URL 
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)url); 
CGPDFPageRef page1 = CGPDFDocumentGetPage(pdf, 1); 

// get the rectangle of the cropped inside 
CGRect mediaRect = CGPDFPageGetBoxRect(page1, kCGPDFCropBox); 
CGContextScaleCTM(ctx, rect.size.width/mediaRect.size.width, 
    rect.size.height/mediaRect.size.height); 
CGContextTranslateCTM(ctx, -mediaRect.origin.x, -mediaRect.origin.y); 

// draw it 
CGContextDrawPDFPage(ctx, page1); 
相關問題