2

PostScript を使用して、特定の幅を超えないように「...」で切り捨てられるような文字列を追加する方法はありますか?

古いレポート生成コードを見て、この機能を追加したいと思います。既存のレポートでは、長すぎる値が他のデータを視覚的に上書きしています。

私が PS レベルでこれを行おうとしている理由は、既存のコードでは、正確な幅メトリックを計算できるものが見当たらないからです。

私はまだ Postscript を書いたことがないので、これは些細なことかもしれません。(?)

以下のコメントごと: はい、ローカリゼーションが問題になります。したがって、ユーザー定義の「省略記号」文字列は理にかなっていると思います。

文字列が現在どのように出力されているかを示す出力例を次に示します。

% Change font style and/or size
/Times-Roman-ISOLatin1 findfont 12 scalefont setfont
219 234 moveto (AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA_) show

これを変更して楕円形にすることはできますか?

4

2 に答える 2

3

次のようなことができます (concatstrings の前の char を省略記号に置き換えます)。

/concatstrings % (a) (b) -> (ab)  
   { exch dup length    
     2 index length add string    
     dup dup 4 2 roll copy length
     4 -1 roll putinterval
   } bind def  

/ellipsis_show {
   1 dict begin
     /width_t exch def
     {dup stringwidth pop width_t lt {exit} if dup length 1 sub 0 exch getinterval} loop
     (_) concatstrings
     show
    end
}def

% Change font style and/or size
/Times-Roman-ISOLatin1 findfont 12 scalefont setfont
0 0 moveto (foobar barfoo foofoo barbar) 100.0 ellipsis_show

concatstrings からコピー: http://en.wikibooks.org/wiki/PostScript_FAQ#How_to_concatenate_strings.3F

于 2013-11-16T21:41:04.743 に答える
1

簡単な答えは「いいえ」です。より長い答えは、PostScript はプログラミング言語であるため、これを行うことができますが、PostScript に関するある程度の知識と作業が必要であり、確かに簡単ではありません。

出力にテキストを描画するさまざまな演算子を再定義できます。かなりの数があります。show、ashow、cshow、kshow、xshow、yshow、xyshow、widthshow、awidthshow、および glyphshow。最終的に印刷されるテキストの幅を (stringwidth とさまざまな演算子で使用されるパラメーターを使用して) 決定するこれらの修正バージョンを定義できます。おそらく、このグリフをグリフごとに計算し、値がしきい値を超えたときに省略記号で終了したいと思うでしょう。(NB すべてのフォントに省略記号グリフが含まれるわけではなく、エンコードされた位置は異なる場合があります)。

ただし、既存のコードで作業していることを考えると、テキストを描画する関数が既に定義されている可能性が高く、使用可能な演算子のサブセットのみを使用している可能性があります。おそらく、それを変更することをお勧めします。

于 2013-11-14T08:23:13.127 に答える