Нарисуйте текст из uitextview в PDF как есть - PullRequest
4 голосов
/ 20 января 2012

У меня есть 4 редактируемых uitextviews, пользователь может установить цвет шрифта шрифта и т. Д. Теперь я хочу нарисовать pdf этих текстовых представлений, но использование метода [self.view.layer renderInContext: UIGraphicsGetCurrentContext ()] приводит к потере его качества, поэтомуя не могу использовать этот метод, вместо этого я перебираю подпредставления и рисую текст в pdf.Теперь моя проблема в том, что для некоторых текстовых представлений текст печатается правильно в формате pdf, но для других текстовых представлений текст рисуется не в правильном положении. Это мой код для рисования pdf из текстового представления.NSArray * arrayOfsubviews = [self.view subviews];

for (int i=0; i<[arrayOfsubviews count]; i++) {

    if ([[arrayOfsubviews objectAtIndex:i]isKindOfClass:[UITextView class]]) {

        UITextView *texts=[arrayOfsubviews objectAtIndex:i];


        CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)texts.font.fontName, texts.font.pointSize,NULL);
        CGColorRef color = texts.textColor.CGColor;

        NSDictionary *attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:
                                        (__bridge id)ctFont, (id)kCTFontAttributeName,
                                        color, (id)kCTForegroundColorAttributeName,nil];


        NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:texts.text
                                                                           attributes:attributesDict];
        CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) stringToDraw);



        CGRect rect=CGRectMake(texts.frame.origin.x,916-texts.frame.origin.y-texts.frame.size.height, texts.frame.size.width, texts.frame.size.height);


        CGMutablePathRef pathRef = CGPathCreateMutable();
        CGPathAddRect(pathRef, NULL,rect);
        CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0),pathRef, NULL);


        CGContextRef context = UIGraphicsGetCurrentContext();


        CGContextSaveGState(context);

        CGContextTranslateCTM(context, 0,916); 
        CGContextScaleCTM(context, 1.0, -1.0);


        CTFrameDraw(frameRef, context);


        CGContextRestoreGState(context);
        CGPathRelease(pathRef);


    }
   }
UIGraphicsEndPDFContext();

Ответы [ 3 ]

4 голосов
/ 25 января 2012

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

#define kBorderInset 20.0
#define kMarginInset 10.0

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

NSString *textToDraw = @"Your Text Here";
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 + 350.0, pageSize.width - 2*kBorderInset - 2*kMarginInset, stringSize.height);

[textToDraw drawInRect:renderingRect 
              withFont:font
         lineBreakMode:UILineBreakModeWordWrap
             alignment:UITextAlignmentLeft];
}
1 голос
/ 25 января 2012

Вы хотите использовать drawInContext: вместо renderInContext :.renderInContext будет растеризовать текст, drawInContext write закодирует его как редактируемый, независимый от разрешения текст.

0 голосов
/ 24 января 2012

Некоторые потери качества или размытые изображения происходят из-за рамки. Значения для нахождения рамки на экране - CGFloat, так что вы можете иметь рамку, расположенную в точке (0.5, 5.7), очевидно, что это не имеет никакого смысла, и point.x должен быть 0 или 1. Десятичные значения сбивают Оперативная система, поэтому рекомендуется убедиться, что кадры всегда имеют значения без десятичных чисел.

Вы можете получить дополнительную информацию здесь: http://www.cobiinteractive.com/blog/2011/06/objective-c-blurry-uiview/ или здесь: http://www.markj.net/iphone-uiview-blurred-blurry-view/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...