2013-03-01 2 views
2

Я работаю над проектом, где мне нужно нарисовать некоторый текст NSString в PDF. Я могу нарисовать текст в формате PDF одним цветом. Я хочу реализовать метод поиска в PDF, с помощью которого я могу выполнить поиск определенной строки в формате PDF и пометить ее другим цветом.Как нарисовать многоцветный текст в PDF в iOS?

Ниже приведен код, который я использую для рисования одиночного цветного текста в формате PDF.

- (void) drawText 
{ 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(currentContext, 0.0, 0.0, 1.0, 1.0); 


    NSString *textToDraw = pdfTextView.text; 



    UIFont *font = [UIFont systemFontOfSize:14.0]; 



    CGSize stringSize = [textToDraw sizeWithFont:font 
           constrainedToSize:CGSizeMake(pageSize.width - 2*kBorderInset-2*kMarginInset, pageSize.height - 2*kBorderInset - 2*kMarginInset) 
            lineBreakMode:UILineBreakModeWordWrap]; 

    CGRect renderingRect = CGRectMake(kBorderInset + kMarginInset, kBorderInset + kMarginInset + 50.0, pageSize.width - 2*kBorderInset - 2*kMarginInset, stringSize.height); 


    [textToDraw drawInRect:renderingRect 
        withFont:font 
      lineBreakMode:UILineBreakModeWordWrap 
       alignment:UITextAlignmentLeft]; 

} 

Также возможно получить текст из PDF (если он содержит только текст)?

Просьба сообщить.

ответ

4

Вам нужно нарисовать атрибутированную строку, а не просто строку. Попробуй это.

CGContextSetTextMatrix(pdfContext, CGAffineTransformIdentity); 
CGMutablePathRef path = CGPathCreateMutable(); 
CGRect bounds = CGRectMake(x, y, width, height); 
CGPathAddRect(path, NULL, bounds); 

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"]; 
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)]; 
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)]; 
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)]; 

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(string); 
// Create the frame and draw it into the graphics context 
CTFrameRef frame = CTFramesetterCreateFrame(framesetter,CFRangeMake(0, 0), path, NULL); 
CFRelease(framesetter); 
CTFrameDraw(frame, pdfContext); 
CGContextTranslateCTM(pdfContext, 0, pageheight); 
CGContextScaleCTM(pdfContext, 1.0, -1.0); 

Это, чтобы дать вам указания, может быть полезно. Я использовал атрибутированную строку для смелых и всех. Надеюсь, это тоже работает на цвета.

Счастливое кодирование.

+1

Спасибо за ваш ответ. Но я не могу получить доступ к другим строковым методам с помощью NSMutableAttributedString. Например, мне нужен метод drawInRect call, как я упоминал в своем коде, который вызывается только NSString. Пожалуйста, совет –

+0

Почему вы хотите использовать drawinrect? – DivineDesert

+0

Я хочу поместить многоцветную строку в PDF. Таким образом, приведенный выше код метода рисует одноцветный текст NSString в PDF. –

Смежные вопросы