2010-06-02 62 views
2

在更新我的iPad應用程序的過程中,我一直在試圖從現有的PDF文檔繪製一個頁面到核心圖形上下文,然後將其保存爲新的PDF,但我很難得到文字正常顯示。新創建的PDF中的圖像看起來不錯,但文本很少正確顯示:更常見的是它看起來不是白色/不可見或亂碼。當文字不可見時,我仍然能夠選擇它應該在哪裏,然後正確地複製/粘貼到文本編輯器中。這是否與iPad上可用的字體數量有關?CGContextDrawPDFPage顯示白色或亂碼文本

我的代碼如下:

CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider); 
CGPDFPageRef page = CGPDFDocumentGetPage(document, pageNumberToRetrieve); 
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); 

UIGraphicsBeginPDFContextToFile(pathToFile, pageRect, nil); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextBeginPage(context, NULL); 

// I don't think this line is necessary, but I have tried both with and without it. 
CGContextSetTextDrawingMode (context, kCGTextFill); 

CGContextDrawPDFPage(context, page); 

CGContextEndPage(context); 
UIGraphicsEndPDFContext(); 
CGDataProviderRelease(dataProvider); 
CGPDFDocumentRelease(document); 

如果任何人有任何建議,我將不勝感激聽他們。

謝謝你的時間。

Rob

回答

0

想要在屏幕上呈現嗎?我沒有看到需要UIGraphicsBeginPDFContextToFile? 然而,呈現在屏幕上,你可以使用這樣的事情:

pageReference = CGPDFDocumentGetPage(pdfReference, page); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    @try { 
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height); 
    CGContextScaleCTM(context, scale, -scale); 

    CGContextSaveGState(context); 
    @try { 
     CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(pageReference, kCGPDFCropBox, self.bounds, 0, true); 
     CGContextConcatCTM(context, pdfTransform); 
     CGContextDrawPDFPage(context, pageReference); 
    } 
    @finally { 
     CGContextRestoreGState(context); 
    } 
    } 
    @finally { 
    UIGraphicsEndImageContext(); 
    } 
+0

「在更新我的iPad應用程序的過程中,我一直試圖從現有的PDF文檔繪製一個頁面到Core Graphics上下文中,然後將其保存爲新的PDF,[<] - < - 這是他的問題的第一行。不知道如何可能錯過...:] – Kalle 2010-08-30 19:33:29

+0

這實際上早上8點15分很安靜,對我來說。 說真的,你看過「Quartz 2D編程指南:PDF文檔創建,查看和轉換」文檔嗎?如果沒有,那麼就有一個關於如何創建文檔,將數據呈現到上下文並保存該文件的代碼示例。 – Fuggly 2010-09-01 08:31:47

2

繪製成圖像內容不構成問題(文字顯示正確)。

我想要做的是創建一個新的PDF文件,其中包含從原始PDF僅幾頁。看起來由於某種原因,文本不能正確地繪製到新文件中。

信息在那裏(我可以通過'猜測'來選擇文本,它應該在預覽中顯示),但它不會呈現。我假設CGContextDrawPDFPage將字符串寫入PDF文件,但不會繪製它,因爲它不知道該字體的字符「看起來像什麼」?

我認爲PDF中的嵌入字體的重點在於,即使該字體未安裝在系統(本例中爲iPad)上,程序也能夠執行這些操作。這是格式限制還是Quartz框架?