iOS CoreText写入PDF和 自动换行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS CoreText写入PDF和 自动换行相关的知识,希望对你有一定的参考价值。

我正在使用rawenderlich.com这篇优秀文章中的代码稍作修改,将一些文字写入PDF:

-(void)drawText:(NSString*)text inFrame:(CGRect)frameRect withAttributes:(NSDictionary*)attributes
{
    CFStringRef stringRef = (__bridge CFStringRef)text;

    // Prepare the text using a Core Text Framesetter
    CFDictionaryRef attributeRef = (__bridge CFDictionaryRef)attributes;

    CFAttributedStringRef currentText = CFAttributedStringCreate(NULL, stringRef, attributeRef);
    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.
    CGFloat offset = (frameRect.origin.y*2)+frameRect.size.height;
    CGContextTranslateCTM(currentContext, 0, offset);
    CGContextScaleCTM(currentContext, 1.0, -1.0);

    // Draw the frame.
    CTFrameDraw(frameRef, currentContext);

    CGContextScaleCTM(currentContext, 1.0, -1.0);
    CGContextTranslateCTM(currentContext, 0, -offset);

    CFRelease(frameRef);
    CFRelease(framesetter);
    CFRelease(currentText);
}

这很好用,但是当它大于帧的宽度时,我无法将文本换行。我只是在我的“一行”文本的末尾得到省略号(...)。

当渲染到屏幕时这会换行,所以我想知道我是否遗漏了写入pdf并将其标记为包装的内容。有人可以提供建议吗?

答案

经过一些研究后,似乎将LineBreak模式设置为TruncateTail。由于此处引用的文章使用.xib文件来指定文本等,我将属性标签文本设置为Word Wrap,但仅限于该标签的属性文本检查器中。从我可以看到,这被忽略,我不得不将换行设置为Word Wrap以获得属性更改。

以上是关于iOS CoreText写入PDF和 自动换行的主要内容,如果未能解决你的问题,请参考以下文章

ios开发,关于图文混排

python使用fpdf将生成的长字符串手动换行写入pdf

java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题

java中使用pdfbox对pdf文件进行操作时,如何实现插入文本的自动换行操作?

iOS阅读器实践系列coretext纯文本排版基础

iOS:CoreText的常用语法