我正在编写一个生成PDF的类,我将在完成后发布它!
我无法使用CTParagraphStyle将文本向右对齐,该文本始终位于左侧。怎么可能呢?我怎么了?
- (void)addText:(NSString *)text color:(UIColor *)color fontSize:(CGFloat)size floating:(BOOL)floating {
CGContextSaveGState(pdfContext);
// Prepare font
CTFontRef font = CTFontCreateWithName(CFSTR("Verdana"), size, NULL);
// Font color
CGColorRef fontColor = [color CGColor];
// Paragraph
CTTextAlignment alignment = kCTRightTextAlignment;
CTParagraphStyleSetting settings[] = {
{kCTParagraphStyleSpecifierAlignment, sizeof(alignment), &alignment}
};
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, sizeof(settings) / sizeof(settings[0]));
// Create an attributed string
CFStringRef keys[] = { kCTFontAttributeName , kCTParagraphStyleAttributeName, kCTForegroundColorAttributeName};
CFTypeRef values[] = { font, paragraphStyle, fontColor};
CFDictionaryRef attr = CFDictionaryCreate(NULL, (const void **)&keys, (const void **)&values,
sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFAttributedStringRef attrString = CFAttributedStringCreate(NULL, (CFStringRef)text, attr);
CFRelease(paragraphStyle);
CFRelease(attr);
// Draw the string
CTLineRef line = CTLineCreateWithAttributedString(attrString);
CGContextSetTextPosition(pdfContext, xPadding, [self relativeHeight:currentHeight+size]);
CTLineDraw(line, pdfContext);
// Clean up
CFRelease(line);
CFRelease(attrString);
CFRelease(font);
CGContextRestoreGState(pdfContext);
if(floating == NO) {
currentHeight += size;
}
}
最佳答案
删除CTLineDraw()
及其相关代码,然后使用CTFrameDraw()
。
尝试这个:
// Create the Core Text framesetter using the attributed string.
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);
// Create the Core Text frame using our current view rect bounds.
UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds];
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), [path CGPath], NULL);
CTFrameDraw(frame, pdfContext);
关于ios - CoreText和右对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13091336/