2013-01-21 29 views
5

Tôi đang tạo một pdf trong ứng dụng ios, sử dụng chức năng drawpdf, trong khi gọi hàm drawtext trong lớp nsobject nó vẽ văn bản rõ ràng theo khung và chuỗi mà tôi đã chỉ định.iOS: Cách đặt phông chữ khi vẽ văn bản trong thế hệ pdf?

Mã của tôi là

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

Nhưng tôi cần phải đặt fontsize văn bản lớn hơn và táo bạo hơn.

tôi đã sử dụng

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

CGContextSetFontSize (currentContext, 20); 

có sự tham khảo các câu trả lời được cung cấp bởi mr.texian trong hàm trên, nhưng không có thay đổi

Tôi thấy pdf tạo ra trong uiwebview.

Tôi nhận được mã này từ lưới. Tôi không biết nơi để chỉnh sửa mã cho cài đặt phông chữ. Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

6

Hãy thử CoreText, một lớp nền tảng rất hữu ích.Sau đây là mã mẫu:

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

Thêm số này vào con trỏ CFAttributtedStringRef.

Điều này sẽ hiệu quả.

+0

cách thêm hai dòng mã trên vào con trỏ CFAttributtedStringRef? –

2

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm

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

void CGContextSetFontSize (
    CGContextRef c, 
    CGFloat size 
); 

Cái gì đó như ...

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

hoặc

CGContextSetFontSize (currentContext, 20); 

Hy vọng rằng sẽ giúp, đây là thêm ... Quartz 2D Programming Guide - Text

+0

+1 cho câu trả lời nhanh chóng, nơi để viết mã này – NAZIK

+0

tôi đã sử dụng mã ur nhưng sản lượng vẫn giữ nguyên – NAZIK

+0

là nó cần thiết để sử dụng khoảng trống CGContextSetFontSize ( CGContextRef c, CGFloat kích thước ); – NAZIK

2

Tạo một CTFont sử dụng CTFontCreateWithNameAndOptions (kiểm tra: CTFont Reference)

Tạo một chuỗi do có thể thay đổi (CFMutableAttributedString Reference) Bạn có thể chỉnh sửa chuỗi có thể thay đổi này và thực hiện bất kỳ thay đổi bạn muốn. Trong trường hợp của bạn, hãy đặt phông chữ của nó.

Tạo CTFrameSetter của bạn bằng chuỗi này và phông chữ sẽ xuất hiện.

Nếu bạn muốn trở thành kỹ lưỡng và có đủ thời gian, đọc String programming Guide

Nếu bạn muốn có một mẫu mã nhanh chóng cho việc sử dụng CFMutableAttributedString, tìm CFMutableAttributedString trên stackoverflow và hầu hết các câu trả lời sẽ cung cấp cho bạn một ý tưởng về làm thế nào để sử dụng này . Ví dụ: this question

1

Điều gì về CGContextSetFont?

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

Đừng quên để phát hành nó:

CGFontRelease(fontRef); 
0

Sau khi tìm kiếm rất nhiều, FND rằng câu trả lời của itsdamslife là đúng, nhưng nó không hỗ trợ cho mã của tôi.

Nhưng, tôi đã giải quyết nó với giá rẻ. tức là, được gọi nhiều lần với chức năng drawText: để nhận phông chữ đậm.

for(int i=0;i<5;i++) 
{ 
[self drawtext]; 
} 
Các vấn đề liên quan