kcg*_*ost 2 bash ubuntu fonts awk svg
我正在开发一个 AWK 脚本,它逐行处理文本文件,将它们格式化并将它们填充到 SVG 文件文本字段中。SVG 会自动处理文本换行,但我想预测每行的换行位置。(我需要一些字符来重复并延伸到行尾)。我知道文本字段的确切字体、字体大小和宽度。
Linux 中是否有标准实用程序或在 Ubuntu 中很容易获得,可以在给定字符串、字体和字体大小的情况下提供以像素或英寸为单位的宽度?
例如:
get-width 'Nimbus Sans L' 18 "test string"
returns "x pixels"
Run Code Online (Sandbox Code Playgroud)
您可以使用 ghostscript 解释器执行此操作,假设您拥有该解释器并且字体设置正确。
这是可能神秘的咒语:
gs -dQUIET -sDEVICE=nullpage 2>/dev/null - \
<<<'18 /NimbusSanL-Regu findfont exch scalefont setfont
(test string) stringwidth pop =='
Run Code Online (Sandbox Code Playgroud)
使用会-dQUIET抑制有关字体替换的警告,这可能不是一个好主意,除非您对如何命名要查找的字体有所了解。
ghostscript不是布局引擎,您可能会发现测量不适用于复杂的双向文本、组合字符或东亚语言。(我用一点阿拉伯语测试了它,它没问题,但不能保证。)它不紧缩,所以它通常会产生比好的布局引擎大一点的测量值,如果字体使用变音符号定位,它可能会大得多字距调整。
最后,如果您的文本包含不平衡的括号或反斜杠,您需要对它们进行转义。我使用以下内容:
"$(sed 's/[()\\]/\\&/g' <<<"$text")"
Run Code Online (Sandbox Code Playgroud)
这是因为 Postscript 字符串包含在(...)-- (test string)-- 中,并且允许包含平衡括号。不平衡的括号通常会产生语法错误,除非它们被反斜杠转义。