iOS:如何在pdf生成中绘制文本时设置字体?

时间:2013-01-21 15:10:46

标签: iphone ios objective-c pdf-generation font-size

我正在使用drawpdf函数在ios应用程序中生成pdf,同时在nsobject类中调用drawtext函数时,它会根据我指定的框架和字符串清晰地绘制文本。

我的代码是

+(void)drawText:(NSString*)textToDraw inFrame:(CGRect)frameRect
{

    CFStringRef stringRef = (__bridge CFStringRef)textToDraw;
// Prepare the text using a Core Text Framesetter
    CFAttributedStringRef currentText = CFAttributedStringCreate(NULL, stringRef, NULL);
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(currentText);


    CGMutablePathRef framePath = CGPathCreateMutable();
    CGPathAddRect(framePath, NULL, frameRect);

// Get the frame that will do the rendering.
    CFRange currentRange = CFRangeMake(0, 0);
    CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, currentRange, framePath, NULL);
    CGPathRelease(framePath);

// Get the graphics context.
    CGContextRef    currentContext = UIGraphicsGetCurrentContext();

// Put the text matrix into a known state. This ensures
// that no old scaling factors are left in place.
    CGContextSetTextMatrix(currentContext, CGAffineTransformIdentity);


// Core Text draws from the bottom-left corner up, so flip
// the current transform prior to drawing.
    CGContextTranslateCTM(currentContext, 0, frameRect.origin.y*2);
    CGContextScaleCTM(currentContext, 1.0, -1.0);
// Draw the frame.
    CTFrameDraw(frameRef, currentContext);

    CGContextScaleCTM(currentContext, 1.0, -1.0);
    CGContextTranslateCTM(currentContext, 0, (-1)*frameRect.origin.y*2);


    CFRelease(frameRef);
    CFRelease(stringRef);
    CFRelease(framesetter);
}

但是我需要将文本fontsize设置得更大更大胆。

我用过

CGContextSelectFont(currentContext, "Helvetica", 20, kCGEncodingMacRoman);

CGContextSetFontSize ( currentContext, 20);

参考mr.texian在上述函数中提供的答案,但没有变化

我在uiwebview中显示生成的pdf。

我从网上获得了这个代码。我不知道在哪里编辑字体设置的代码。 任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:6)

请尝试CoreText,这是一个非常有用的基础类。以下是示例代码:

CTFontRef font = CTFontCreateWithName((CFStringRef)@"Arial", 16.0f, nil);
CFAttributedStringSetAttribute(textString,CFRangeMake(0, strLength-1), kCTFontAttributeName, font);

将其添加到CFAttributtedStringRef指针。

这应该有用。

答案 1 :(得分:2)

我认为这些就是你要找的东西

void CGContextSelectFont (
    CGContextRef c,
    const char *name,
    CGFloat size,
    CGTextEncoding textEncoding
);

void CGContextSetFontSize (
   CGContextRef c,
   CGFloat size
);

像...一样的东西。

CGContextSelectFont(currentContext, "Helvetica", 20, kCGEncodingMacRoman);

CGContextSetFontSize ( currentContext, 20);

希望有所帮助,这里更多...... Quartz 2D Programming Guide - Text

答案 2 :(得分:2)

使用CTFont创建CTFontCreateWithNameAndOptions(请检查:CTFont Reference

创建一个可变的属性字符串(CFMutableAttributedString Reference) 您可以编辑此可变字符串并进行所需的任何更改。在您的情况下,请设置它的字体。

使用此字符串创建CTFrameSetter并显示字体。

如果您想要彻底并有足够的时间,请阅读String programming Guide

如果您想要使用CFMutableAttributedString的快速代码示例,请在stackoverflow上搜索CFMutableAttributedString,大多数答案都会让您了解如何使用它。对于例如this question

答案 3 :(得分:1)

您可以尝试“libHaru”在iPhone项目中生成pdf。

https://github.com/akisute/iPhonePDF

希望它能帮助!!!

答案 4 :(得分:1)

CGContextSetFont怎么样?

NSString *fontName = @"Helvetica";
CGFontRef fontRef = CGFontCreateWithFontName((__bridge CFStringRef)fontName);
CGContextSetFont(context, fontRef);
CGContextSetFontSize(context, 20);

别忘了发布它:

CGFontRelease(fontRef);

答案 5 :(得分:0)

经过大量搜索后,发现itdamslife的答案是正确的,但它不支持我的代码。

但是,我便宜地解决了它。 即,多次调用drawText:函数以获得粗体字。

for(int i=0;i<5;i++)
{
 [self drawtext];
}