私はPPLA言語を使用して、ラベルをArgoxOS-214に直接印刷します。
長いテキストをワードラップするにはどうすればよいですか?
計算を行う必要がありますか、それとも私のためにそれを行う関数はありますか?
計算する必要がある場合、それを行うためのヒントはありますか?
PPLA言語マニュアルには、長いテキスト行をワードラップする機能がないため、コマンドをプリンターに送信する前に、改行を挿入する場所を自分で計算する必要があります。
それを行う方法は、使用しているプログラミング言語によって異なります。たとえば、PHP言語には、それを実行できるワードラップ関数があります(ワードラップ関数のCソースコードは、ここの803行目にあります)。
ワードラップアルゴリズムの簡単な説明は、ウィキペディアにあります。
SpaceLeft := LineWidth
for each Word in Text
if (Width(Word) + SpaceWidth) > SpaceLeft
insert line break before Word in Text
SpaceLeft := LineWidth - Width(Word)
else
SpaceLeft := SpaceLeft - (Width(Word) + SpaceWidth)
まず、テキストを単語に分割する必要がありますが、これは問題ではないと思いますので、これ以上詳しく説明しません。
LineWidth
ラベルの幅から左右の余白の幅を引いたものとして計算する必要があります。
テキストに単一の固定幅(非比例)フォントを使用していると仮定すると、をLineWidth
文字幅で割るだけで(または、テキストの長い行を印刷してから数えるだけで)、を文字数に変換できます。印刷される文字数); このように、各単語の長さはその文字数に対応します。
そうしないと、プロポーショナルフォントを使用している場合、各文字幅がわからない限り、各単語幅の計算はより困難になります。
印刷をシミュレートし、改行を挿入する場所を計算するために、ラベルと同じピクセルサイズの画像を使用することも考えられますが、これには、各単語のピクセル幅を計算する関数が必要です(たとえば、 PHPにはimagettfbbox関数があります)、またプリンターとPCでまったく同じフォントを使用します。
ラベルの幅より長い単語も処理しなければならない可能性があることに注意してください。この場合、で単語を分割LineWidth
して次の行に進む必要があります。