Ghostscript无法正确打印重音字符

时间:2014-08-27 00:51:59

标签: linux unicode ghostscript

我有一个Bash脚本,可以将文本水印写入PDF文件。它通过使用Ghostscript生成叠加PDF然后使用PDFtk将叠加层标记到原始上来实现。

所有这一切都很完美,除了Ghostscript没有正确地写出重音字符。如果我的输入文本是例如“Français”,则PDF上的输出将是“Fran§ais”。

我的Ghostscript命令行是:

/usr/local/bin/gs -q -o "${TEMPFILE}" \
-sDEVICE=pdfwrite -sPAPERSIZE=letter \
-c "60 23 moveto 0.32 0.23 0.22 setrgbcolor /Helvetica-Oblique findfont 9 scalefont setfont (${WATERMARK}) show"

$WATERMARK变量包含要写入的单行文本。运行包含此行的Bash脚本时以及直接运行此命令时都会出现此问题。

我在Mac OS X上使用Ghostscript 9.06(通过Homebrew安装)和Ubuntu 12.04上的9.05(从Ubuntu软件包库安装)看到了这个问题。 Bash脚本和gs命令行都是由其他人编写的;我自己没有使用Ghostscript的经验。

更改字体对问题没有影响,我一直无法谷歌与此相关的任何有用的东西。我们在这里做错了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

您还没有正确编码字体(或根本没有)。

您假设代表名为ccedilla的字形的字符代码与您计算机系统上的字体相同。对于拉丁字体和最多127的ASCII字符,这通常是正确的,对于超出通常不是的字符,对于非拉丁语言(例如俄语,阿拉伯语,CJKV语言等),它不是。确实如此。

编码字体并不难,但是进入这里相当冗长,所以让我推荐一下Acumen培训的John Deubert撰写的优秀系列文章,你可以在这里找到它们:

http://www.acumentraining.com/acumenjournal.html

出于您的目的,我建议使用2001年11月和12月的文章。