按照原样从uitextview绘制文本到pdf

我有4个可编辑的uitextviews,用户可以设置其字体的字体颜色等现在我想绘制这些textviews的pdf,但使用[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]方法导致失去其质量,所以我不能使用这种方法,而是我遍历子视图,并在pdf中绘制文本。 现在我的问题是,对于一些textviews文本正确打印在pdf中,但对于其他textviews文本没有绘制在适当的位置。这是我的代码从textview绘制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(); 

我用这个来画我的文字,工作得很好..也许它可以指向你正确的方向。

 #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]; } 

你想使用drawInContext:而不是renderInContext :. renderInContext将光栅化文本,drawInContext将其编码为可编辑的独立于分辨率的文本。

一些质量或模糊的意见是由于框架。 在屏幕上定位一个框架的价值是CGFloat,所以你可以有一个框架位于点(0.5,5.7),显然这没有任何意义,point.x必须是0或1.十进制值混淆操作系统,所以build议确保框架始终值没有小数。

你可以在这里find更多的信息: http : //www.cobiinteractive.com/blog/2011/06/objective-c-blurry-uiview/或者这里: http : //www.markj.net/iphone-uiview-blurred -blurry视图/