2

有没有办法通过 PostScript 添加一个字符串,以便被“...”截断,以免超过一定的宽度?

我正在查看一些旧的报告生成代码,并希望添加此功能。在现有报告中,过长的值会在视觉上覆盖其他数据。

我试图在 PS 级别执行此操作的原因是,在现有代码中,我看不到任何可以计算任何类型的准确宽度度量的东西。

我还没有写任何后记,所以这可能是微不足道的。(?)

根据下面的评论:是的,本地化将是一个问题。所以我猜用户定义的“省略号”字符串是有道理的。

以下是一些示例输出,显示了当前如何打印字符串:

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

这可以修改为椭圆形吗?

4

2 回答 2

3

那么你可以做这样的事情(用你的省略号替换 concatstrings 前面的字符):

/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 的知识,以及一些工作,这当然不是小事。

您可以重新定义在输出上绘制文本的各种运算符,有很多;显示、ashow、cshow、kshow、xshow、yshow、xyshow、widthshow、awidthshow 和 glyphshow。您可以定义这些的修改版本,以确定(使用 stringwidth 和各种运算符使用的参数)最终打印文本的宽度。可能您希望按字形计算此字形,并在值超过某个阈值时以省略号终止。(注意并非所有字体都包含省略号字形,其编码位置可能会有所不同)。

但是,鉴于您正在使用现有代码,很可能已经定义了一个用于绘制文本的函数,并且它可能只使用了可能的运算符的一个子集。建议您修改它可能会更好。

于 2013-11-14T08:23:13.127 回答