JWood
JWood

Reputation: 2834

Multi page PDF with CoreText

I'm using CoreText to produce a PDF document which contains a series of NSAttributedString's so I create a CTFrameSetterRef and give it a frame covering the whole page and then loop through using CTFrameDraw to draw the text checking the result of CTFrameGetVisibleStringRange to detect when to start a new page. This works great but how can I tell where the text ended? For example the text may stop halfway down the final page and I want to draw some images below. How can I get the position the text ended at?

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)notesAttrString);
do {
    CTFrameRef frame = CTFramesetterCreateFrame(framesetter, currentRange, path, NULL);
    if( frame ) {
        CTFrameDraw(frame, context);

        if( currentRange.location < CFAttributedStringGetLength((CFAttributedStringRef)notesAttrString) ) {
             UIGraphicsBeginPDFPage();
        } else {
            complete = YES;
        }
    }
} while( !complete );

(Above code is cut down for illustration of the process and not complete)

Upvotes: 1

Views: 593

Answers (1)

omz
omz

Reputation: 53561

You can either use CTFrameGetLineOrigins and check the origin of the last line, or CTFramesetterSuggestFrameSizeWithConstraints to get the size of the entire frame.

Upvotes: 3

Related Questions