1

我使用以下命令将txt转换为ps。然后将ps转换为pdf。

enscript --header='Page $% of $=' --word-wrap -o output.ps 2>/dev/null < input.txt

但它不适用于 utf-8 输入。

enscript --header='Page $% of $=' --word-wrap -o output.ps 2>/dev/null <<< ℃

上面的命令会â\204\203生成输出文件。

我看到讨论说不enscript支持 utf-8。似乎有几种将 txt 转换为 pdf 的替代方案。但目前尚不清楚哪一个是最强大和最方便使用的。有人知道这个问题的最佳解决方案吗?

4

1 回答 1

1

(将此作为编程问题处理,而不是软件推荐请求,这将是题外话)。

您不能使用 UTF-8,或者至少不能简单地使用。PostScript 根本不直接支持 UTF-8。然而....

由于 PostScript 是一种编程语言,您可以编写一个程序来检查 UTF-8 序列的第一个字节,以查看它是字符代码还是指示更多字节的代码。基本上撤消编码以生成 Unicode 代码点。

从那里,使用字形名称和 Unicode 代码点列表,您可以创建具有自定义编码的字体,而不是将 UTF-8 写入 PostScript 程序,而是写入通过编码将字符代码映射到相关字形名称。

或者您可以定义一个 CIDFont,然后创建一个 CMap,它将 UTF-8 的可变长度字节序列映射到 CID,以从字体中引用正确的字形。IIRC 周围已经有 UTF-16 CMaps,实际上 Adob​​e 在这里提供了其中的一些,其中还包括各种 CJKV 语言的 UTF-16 和 UTF-32 版本。

请注意,虽然这些方法会生成正确呈现的 PostScript,然后可用于创建正确显示的 PDF 文件,但无法复制/搜索生成的 PDF 文件。

为了搜索 PDF 文件,字体必须具有关联的 ToUnicode CMap,这是一个仅限 PDF 的构造,它在 PostScript 中不存在,并且没有 PostScript 等效项。因此无法将该信息嵌入到 PostScript 程序中,这意味着它无法嵌入到 PDF 文件中。

于 2019-08-11T08:47:27.270 回答