2015-11-07 51 views
1

我正在更新舊應用程序,但我無法使drawInRect在PDF上下文上工作。drawInRect不適用於PDF

我用CGContextShowTextAtPoint替換了棄用函數CGContextShowTextAtPoint(請參閱下面的代碼),但它不寫任何文本。

我在哪裏錯了?

這是我的代碼:

-(NSMutableData *) writeToPDF { 

CGRect   pageRect; 

pageRect = CGRectMake(0.0f, 0.0f, 612, 850); 

NSMutableData *pdfData = [[NSMutableData alloc] init]; 
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData); 

CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &pageRect, NULL); 

CGContextSetTextDrawingMode (pdfContext, kCGTextFill); 

// Page 1 

CGContextBeginPage(pdfContext, &pageRect); 
CGContextSetRGBStrokeColor(pdfContext, 0, 0, 0, 1); 

CGAffineTransform transf = CGAffineTransformMake(1, 0, 0, -1, 0, pageRect.size.height); 
CGContextConcatCTM(pdfContext, transf); 

// Line - OK 

CGContextMoveToPoint(pdfContext,0,0); 
CGContextAddLineToPoint(pdfContext,pageRect.size.width,pageRect.size.height); 
CGContextDrawPath(pdfContext, kCGPathStroke); 

CGContextSetTextDrawingMode (pdfContext, kCGTextFill); 

CGAffineTransform myTextTransform = CGAffineTransformMake(1,0,0,-1,0,0); 
CGContextSetTextMatrix(pdfContext, myTextTransform); 

// Text - Old working code to replace because CGContextSelectFont and CGContextShowTextAtPoint are deprecated 

CGContextSelectFont(pdfContext, "Helvetica", 20, kCGEncodingMacRoman); 
CGContextShowTextAtPoint(pdfContext, 50, 50, [@"Hello" UTF8String], [@"Hello" length]); 

// Text - Replacing code that doesn't work 

NSDictionary *attrs = @{ NSForegroundColorAttributeName : [UIColor blackColor], 
         NSFontAttributeName : [UIFont systemFontOfSize:20] 
         }; 


[@"Hello2" drawInRect:CGRectMake(50, 100, 100, 100) withAttributes:attrs]; 

CGContextDrawPath(pdfContext, kCGPathStroke); 

CGContextEndPage(pdfContext); 

// 

CGPDFContextClose(pdfContext); 
CGContextRelease(pdfContext); 

CGDataConsumerRelease(dataConsumer); 

return pdfData; 
} 
+0

我不能立即測試你的代碼 - 但你設置當前的圖形上下文? drawInRect使用當前的圖形上下文,我沒有看到你將PDF上下文設置爲當前任何地方。查看UIGraphicsPushContext以將PDF上下文設置爲當前。 –

+0

謝謝,這是解決方案。你拯救了我的一天。我想知道drawInRect如何知道當前的上下文,但我完全錯過了UIGraphicsPushContext。 – Fab

+0

我會寫一個簡短的答案,以便您可以批准它,其他人也可以稍後看到答案。 –

回答

1

至於反對你使用其他功能方面,drawInRect並不需要一個圖形上下文。這意味着它使用當前的圖形上下文,並且在撥打電話之前必須確保您的PDF上下文是最新的。

通過UIGraphicsPushContext函數可以完成圖形上下文的最新操作。一旦完成後,不要忘記再次彈出圖形上下文。