有没有办法通过PostScript添加一个字符串,这样就会被“...”截断,以免超过一定的宽度?
我正在查看一些旧的报告生成代码,并希望添加此功能。在现有报告中,过长的值会在视觉上覆盖其他数据。
我尝试在PS级别执行此操作的原因是,在现有代码中,我没有看到任何可以计算任何类型的准确宽度度量的内容。
我还没有写任何Postscript,所以这可能是微不足道的。 (?)
以下评论:是的,本地化将成为一个问题。所以我猜用户定义的“省略号”字符串是有道理的。
以下是一些示例输出,显示当前如何打印字符串:
% Change font style and/or size
/Times-Roman-ISOLatin1 findfont 12 scalefont setfont
219 234 moveto (AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA_) show
这可以修改为椭圆形物体吗?
答案 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。您可以定义这些的修改版本,这些版本确定(使用字符串宽度和各种运算符使用的参数)最终打印文本的宽度。您可能希望按字形计算此字形,并在值超过某个阈值时使用省略号终止。 (注意,并非所有字体都包含省略号字形,其编码位置可能会有所不同)。
但是,鉴于您正在使用现有代码,很可能已经定义了一个用于绘制文本的函数,它可能只使用了可能的运算符的子集。你可能最好修改它。