Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS: How to set font when drawing text in pdf generation?

I'am generating a pdf in ios app, using drawpdf function,while calling the drawtext function in the nsobject class it draws the text clearly according to the frame and string which I specified.

My code is

+(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);
}

But I need to set the text fontsize bigger and bolder.

I used

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

and

CGContextSetFontSize ( currentContext, 20);

with reference to the answer provided by mr.texian in the above function, but no changes

I am showing the generated pdf in uiwebview.

I got this code from net. I didn't know where to edit the code for font setting. Any help will be appreciated.

like image 825
Nazik Avatar asked Jan 21 '13 15:01

Nazik


2 Answers

Please try CoreText, a very useful foundation class. Following is the sample code:

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

Add this to the CFAttributtedStringRef pointer.

This should work.

like image 50
itscoderslife Avatar answered Nov 15 '22 07:11

itscoderslife


I think these are what you are looking for

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

and

void CGContextSetFontSize (
   CGContextRef c,
   CGFloat size
);

Something like...

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

or

CGContextSetFontSize ( currentContext, 20);

Hope that helps, here is more... Quartz 2D Programming Guide - Text

like image 45
texian Avatar answered Nov 15 '22 08:11

texian