如何在PDF上下文中绘制文本

时间:2014-02-20 05:07:37

标签: ios pdf

在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生成的测试代码,但它仍然崩溃了。

enter image description here

1 个答案:

答案 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);