在PDF文件中绘制文字的正确方法是什么?首先,我试过了:
NSString* string = @"Some Text";
const char* chstr = [string UTF8String];
CGContextRef pdfContext = CGPDFContextCreate(pdfConsumer, &pdfPageRect, NULL);
...
CGContextShowTextAtPoint(pdfContext, x, y, chstr, strlen(chstr));
...
CGContextRelease(pdfContext);
这有效,但没有正确显示unicode文本。 iOS CG中也不推荐使用API CGContextShowTextAtPoint。所以我试过了:
NSDictionary *textAttributes = @{NSFontAttributeName: [UIFont systemFontOfSize:8.0]};
...
UIGraphicsPushContext(pdfContext);
[string drawAtPoint:CGPointMake(x, y) withAttributes:textAttributes];
UIGraphicsPopContext();
...
CGContextRelease(pdfContext);
正如一些SO帖子所暗示的那样。但是应用程序崩溃了CGContextRelease(pdfContext)。如果我删除CGContextRelease(pdfContext),它不会在PDF中绘制任何内容。我错过了什么吗?
**其他信息**
我发现CGContextRelease中的崩溃只发生在NSString包含unicode文本时,这里是崩溃时调用堆栈的图像。我甚至在[AppDelegate didFinishLaunchingWithOptions]中移动了PDF生成的测试代码,但它仍然崩溃了。
答案 0 :(得分:0)
你可以试试这个!我已经测试过它了。
//准备开始
UIGraphicsBeginPDFContextToFile(tempPath,CGRectZero,nil);
CGPDFPageRef page = CGPDFDocumentGetPage(doc,i);
//抓住PDF的第i页
CGRect bounds = [ReaderDocument boundsForPDFPage:page];
//Create a new page
UIGraphicsBeginPDFPageWithInfo(bounds, nil);
CGContextRef context = UIGraphicsGetCurrentContext();
// flip context so page is right way up
CGContextTranslateCTM(context, 0, bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawPDFPage (context, page); // draw the page into graphics context
//Flip back right-side up
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -bounds.size.height);
//Draw text
UIGraphicsPushContext(context);
CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));
CGContextSetTextDrawingMode(context, kCGTextFill); // This is the default
CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
CGRect newTextFrame = CGRectMake(100,100,100,30);
[@"Your Text......" drawInRect:newTextFrame withAttributes:@{NSFontAttributeName:self.font}];
UIGraphicsPopContext();
UIGraphicsEndPDFContext();
CGPDFDocumentRelease(doc);