文字バイトを取得してフォントサイズを調整する方法

レイアウトを調整していると、フィールドのサイズに合わせてテキストのフォントサイズを調整することがあります。文字数に合わせて自動的にフォントサイズを調整する方法を紹介します。

テキストのデータ量であるバイトを取得する計算式について

文字数に応じて、テキストのデータ量を取得する計算式を作成します。

まず初めに、「テストフィールド」というフィールドを作成します。フィールドタイプはテキストにします。

次に、「バイト数」というフィールドを作成します。フィールドタイプは計算式にします。計算結果は「数字」にします。

下記が「バイト数」フィールドの計算式になります。「テストフィールド」というのは、先ほど作成したバイト数を計算したい文字フィールドになります。

Length ( テストフィールド & Filter ( テストフィールド  ; RomanZenkaku ( KanaZenkaku ( テストフィールド ))))

索引オプションで、「計算結果を保存せず必要時に再計算する」にチェックを入れます。

全角1文字で2バイト、半角1文字で1バイト、スペースでも同様の計算結果になります。

バイト数に応じてフォントサイズを変更する計算式について

色々な方法があると思いますが、今回はcase関数を使用します。

「テストフィールド フォントサイズ調整後」というフィールドを作成します。フィールドタイプは計算です。計算式を以下のように設定します。

Case ( 
バイト数 ≤ 32 ; TextSize ( テストフィールド ; 12 ) ;
バイト数 ≤ 36 ; TextSize ( テストフィールド ; 11 ) ;

バイト数 ≤ 40 ; TextSize ( テストフィールド ; 10 ) ;
バイト数 ≤ 44 ; TextSize ( テストフィールド ; 9 ) ;
バイト数 ≤ 50 ; TextSize ( テストフィールド ; 8 ) ;
バイト数 ≥ 51 ; TextSize ( テストフィールド ; 7 ) 
)

この計算式はCase関数とTextSize関数を使用して、シンプルに、

バイト数が32以下だった場合は、テストフィールドのフォントサイズを12にする

バイト数が36以下だった場合は、テストフィールドのフォントサイズを11にする

バイト数が40以下だった場合は、テストフィールドのフォントサイズを10にする

バイト数が44以下だった場合は、テストフィールドのフォントサイズを9にする

バイト数が50以下だった場合は、テストフィールドのフォントサイズを8にする

バイト数が51以上だった場合は、テストフィールドのフォントサイズを7にする

という論理です。

計算結果は「テキスト」にします。索引オプションで、「計算結果を保存せず必要時に再計算する」にチェックを入れます。

レイアウトに配置して動作確認する

では、実際にレイアウトを作成して動作確認をしていきます。

このようなレイアウトになりました。「テストフィールド フォントサイズ調整後」フィールドのサイズですが、幅217pt、高さ25ptにしています。このサイズに合わせてフィットするよう、計算式を組んでいます。

32バイトまでのフォントサイズは12になってます。

34バイトになると、フォントサイズが11になります。

ちゃんと動作しています。

56バイトではフォントサイズが7になっています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です