0

私はいくつかのレガシーコードとシステムに取り組んでおり、テキストの自動サイズ変更を機能させようとしています。ただし、コードは非常にうまく機能しているにもかかわらずです。これはまた、実際の 1 つの単語を 2 つの単語にラップします。

たとえば、品質

になる

ここに画像の説明を入力

単語の折り返しを維持し、文字の折り返しを削除する方法を知っている人はいますか?

ありがとう

コード:

truncated = 1
fontSize = 127
thewords = Request("words")   ' try QUALITY    

do while Cint(truncated) = 1

set theDoc = Server.CreateObject("ABCpdf7.Doc") 
fontSize = fontSize - 2

if fontSize <= 0 Then
   exit do
end if

theDoc.Rect.Width = 273
theDoc.Rect.Height = 202
theDoc.Color.Alpha = 0
theDoc.FillRect()
theDoc.Color.Alpha = 255 
theDoc.FrameRect()
theFont1 = "C:\inetpub\wwwroot\fonts\fonts\Helvetica.ttf"
theDoc.Font = theDoc.EmbedFont(theFont1, Latin, False, False, True)
theDoc.Fontsize = fontsize
theDoc.VPos = 0.5
theDoc.color = "75 68 67 90"
oText = theDoc.AddTEXT(thewords)
truncated = theDoc.GetInfo(oText, "Truncated")
'Response.Write(truncated & "<br>")

Loop      
Data = theDoc.Rendering.GetData("testing.png")
Response.ContentType = "image/png"
Response.BinaryWrite Data

これが古いコードであり、古いバージョンでさえあることは知っていますが、これがシステムが実行するものです。誰かが手がかりを持っているなら、それは大歓迎です。

ありがとう

4

1 に答える 1

2

abcPDF は、次の場合にのみレター ラップを行います。

  1. ラッピング中です
  2. 設定されている単語の 1 つに収まる十分な水平方向のスペースがありません
  3. アクティブな四角形に別の行を入れるための垂直方向のスペースがあります

したがって、これらの条件は、縦方向には十分なスペースがありますが、特に長い単語を入れるには十分な横方向のスペースがないということになります。したがって、正しいフォント サイズを見つけるためのヒューリスティックは、文字列から最も長い単語のみを使用して、最初に水平方向にテストし、フォント サイズを小さくするとフォント サイズよりも 1 つ大きく縮小する一時的な四角形でテストすることです。次に、文字の折り返しを避けるための適切なフォント サイズを取得したら、元の四角形と文字列全体を使用してテストに戻り、切り捨てが完全になくなるまでフォント サイズを縮小し続けます。

設定しようとしているものが、実際にはバリアント フォントまたはサイズの HTML である場合、これはさらに複雑になります。ただし、単一のフォントとスタイルのプレーン テキストの場合は問題ありません。

于 2013-05-17T14:37:41.097 に答える