6

これは、コアグラフィックスを使用したPDFフォーマットについてです。ただし、2ページに文字列を印刷する場合は、どのような種類のページングでもかまいません。

文字列を複数のページに広げる必要があります。小さい文字列の場合、これは実際の問題ではありません。それらについては、NSString UIKit拡張機能を使用して、sizeWithFont全文が現在のページに収まるかどうかを判断します。含まれている場合はで印刷しdrawInRect、そうでない場合は次のページに移動します。

正常に動作しますが、長い文字列には適していません。私のアプリでは、個々の文字列(ユーザーが提供)がページ全体よりも長くなる場合があります。

指定されたページ全体またはページの残りのスペースがある場合、NSStringのどの部分をその指定されたrectに表示できるかを正確に判断して、残りの文字列(または少なくとも一部)を切り取って印刷できるようにするにはどうすればよいですか?それの)次の​​ページで?

私は別の方法を考えました。つまり、全文を画面外のグラフィックコンテキストに描画し、作成した画像をページの空き領域に収まるスライスにカットします。しかし、そうする場合は、テキスト行の間に正確に切断線を配置する必要があります。そして率直に言って、グラフィックを含むテキストを、中央に1行のテキストをカットせずに、安全に2つ(またはそれ以上)の部分にカットできる場所を見つける方法がわかりません。

理解できることを表明し、誰かが助けに来てくれることを願っています。

4

3 に答える 3

2

Core Textを使用していない一般的なケースでは、サイズが大きくなりすぎるまで文字列に文字を追加し続けることができます。これは非常に高速である可能性があり、(あなたが思うように)本当に巨大な文字列がある場合は、単純なバイナリ検索で高速化できます。

Core Textを使用している場合はCTFrame、塗りつぶしたい領域のを作成してから、で使用した範囲を尋ねますCTFrameGetVisibleStringRange()

于 2013-03-10T17:49:57.317 に答える
2

Core Textには、非常に関連性の高い関数があり、その最後の引数(CFRangeへのポインター)は次のように定義されています。

fitRange
戻り時に、制約されたサイズに実際に収まる文字列の範囲が含まれます。
于 2013-03-10T20:36:32.697 に答える
0

近似を使ってみませんか?

- (NSInteger)lengthOfString:(NSString *)str
           thatFitsIntoView:(UIView *)displayView
                   withFont:(UIFont *)font
{
    CGSize textSize = [str sizeWithFont:font
                               forWidth:displayView.frame.size.width
                          lineBreakMode:NSLineBreakByWordWrapping];

    NSInteger lengthThatFits;
    if (textSize.height > displayView.frame.size.height) {
        lengthThatFits = str.length * displayView.frame.size.height / textSize.height;
    } else {
        lengthThatFits = str.length;
    }

    return lengthThatFits;
}

次のように呼びます:

NSString *str = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eros"
    "nulla, commodo eget fringilla nec, varius nec ligula. Donec pulvinar eros sed diam"
    "euismod scelerisque. Mauris imperdiet leo at elit vulputate ullamcorper. Nullam"
    "condimentum odio a lacus tempus ac pretium justo tincidunt.";

UIFont *font = [UIFont systemFontOfSize:16.0]; // or whatever
UIView *displayView = // the view in which you intend to present the string

NSInteger length = [self lengthOfString:str thatFitsIntoView:displayView usingFont:font];
NSString *displayedString = [str substringToIndex:length];
于 2013-03-10T11:20:16.933 に答える