后记:用省略号截断字符串?

时间:2013-11-13 23:23:11

标签: string printing postscript

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

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

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

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

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

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

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

这可以修改为椭圆形物体吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

简单的答案是'不'。更长的答案是,由于PostScript是一种编程语言,你可以这样做,但它需要一些PostScript知识,有些工作,这当然不是一件容易的事。

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

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