drawInRect 不适用于 PDF
drawInRect doesn't work with 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;
}
与您使用的其他函数不同,drawInRect 不采用图形上下文。这意味着它使用当前的图形上下文,您必须在调用之前确保您的 PDF 上下文是最新的。
可以使用 UIGraphicsPushContext 函数使图形上下文成为当前图形上下文。完成后不要忘记再次弹出图形上下文。
我正在更新一个旧应用程序,但我无法使 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;
}
与您使用的其他函数不同,drawInRect 不采用图形上下文。这意味着它使用当前的图形上下文,您必须在调用之前确保您的 PDF 上下文是最新的。
可以使用 UIGraphicsPushContext 函数使图形上下文成为当前图形上下文。完成后不要忘记再次弹出图形上下文。