第 11 章。数据转换

目录

11.1. 文本数据转换工具
11.1.1. 使用 iconv 转换文本文件
11.1.2. 使用 iconv 检查文件是否为 UTF-8 编码
11.1.3. 使用 iconv 转换文件名
11.1.4. EOL 转换
11.1.5. TAB 转换
11.1.6. 带有自动转换功能的编辑器
11.1.7. 纯文本提取
11.1.8. 突出显示和格式化纯文本数据
11.2. XML 数据
11.2.1. XML 的基本提示
11.2.2. XML 处理
11.2.3. XML 数据提取
11.3. 可打印数据
11.3.1. Ghostscript
11.3.2. 合并两个 PS 或 PDF 文件
11.3.3. 可打印数据实用程序
11.3.4. 使用 CUPS 打印
11.4. 类型设置
11.4.1. roff 类型设置
11.4.2. TeX/LaTeX
11.4.3. 漂亮地打印手册页
11.4.4. 创建手册页
11.5. 邮件数据转换
11.5.1. 邮件数据基础知识
11.6. 图形数据工具
11.7. 其他数据转换

描述了 Debian 系统上用于转换数据格式的工具和技巧。

基于标准的工具状态良好,但对专有数据格式的支持有限。

11.1. 文本数据转换工具

以下用于文本数据转换的软件包引起了我的注意。

表 11.1. 文本数据转换工具列表

软件包 popcon 大小 关键词 描述
libc6 http://qa.debian.org/popcon.php?package=libc6 9500 字符集 通过 iconv(1) 在区域设置之间进行文本编码转换器(基本)
recode http://qa.debian.org/popcon.php?package=recode 768 字符集+eol 在区域设置之间进行文本编码转换器(通用,更多别名和功能)
konwert http://qa.debian.org/popcon.php?package=konwert 192 字符集 在区域设置之间进行文本编码转换器(花哨)
nkf http://qa.debian.org/popcon.php?package=nkf 205 字符集 日语字符集转换器
tcs http://qa.debian.org/popcon.php?package=tcs 544 字符集 字符集转换器
unaccent http://qa.debian.org/popcon.php?package=unaccent 76 字符集 用其非重音等效字母替换重音字母
tofrodos http://qa.debian.org/popcon.php?package=tofrodos 67 eol DOS 和 Unix 之间的文本格式转换器:fromdos(1)todos(1)
macutils http://qa.debian.org/popcon.php?package=macutils 320 eol Macintosh 和 Unix 之间的文本格式转换器:frommac(1)tomac(1)

11.1.1. 使用 iconv 转换文本文件

[Tip] 提示

iconv(1) 作为 libc6 软件包的一部分提供,并且几乎在所有系统上都可用,用于转换字符的编码。

您可以使用 iconv(1) 按如下方式转换文本文件的编码。

$ iconv -f encoding1 -t encoding2 input.txt >output.txt

编码值不区分大小写,匹配时忽略“-”和“_”。可以通过“iconv -l”命令检查支持的编码。

表 11.2. 编码值及其用法列表

编码值 用法
ASCII. 美国信息交换标准代码,7 位代码,不带重音字符
UTF-8 当前所有现代操作系统的多语言标准
ISO-8859-1 西欧语言的旧标准,ASCII + 重音字符
ISO-8859-2 东欧语言的旧标准,ASCII + 重音字符
ISO-8859-15 西欧语言的旧标准,带有欧元符号的 ISO-8859-1
CP850 代码页 850,带有西欧语言图形的 Microsoft DOS 字符,ISO-8859-1 变体
CP932 代码页 932,Microsoft Windows 样式 Shift-JIS 日语变体
CP936 代码页 936,Microsoft Windows 样式 GB2312GBKGB18030 简体中文变体
CP949 代码页 949,Microsoft Windows 样式 EUC-KR 或统一韩语代码韩语变体
CP950 代码页 950,Microsoft Windows 样式 Big5 繁体中文变体
CP1251 代码页 1251,Microsoft Windows 样式西里尔字母编码
CP1252 代码页 1252,Microsoft Windows 样式 ISO-8859-15 西欧语言变体
KOI8-R 西里尔字母的旧俄罗斯 UNIX 标准
ISO-2022-JP 仅使用 7 位代码的日语电子邮件的标准编码
eucJP 旧的日语 UNIX 标准 8 位代码,与 Shift-JIS 完全不同
Shift-JIS 日语 JIS X 0208 附录 1 标准(请参阅 CP932

[Note] 注意

某些编码仅支持数据转换,不作为区域设置值使用(第 8.3.1 节,“编码基础知识”)。

对于适合单字节的字符集,例如 ASCIIISO-8859 字符集,字符编码 与字符集几乎是同一回事。

对于具有许多字符的字符集,例如日语的 JIS X 0213 或实际上所有语言的 通用字符集(UCS、Unicode、ISO-10646-1),有许多编码方案可以将它们放入字节数据序列中。

对于这些,字符集和字符编码之间有明显的区别。

代码页 用作某些特定于供应商的字符编码表的同义词。

[Note] 注意

请注意,大多数编码系统对于 7 位字符都与 ASCII 共享相同的代码。但也有一些例外。如果要将旧的日语 C 程序和 URL 数据从随意称为 shift-JIS 编码格式转换为 UTF-8 格式,请使用“CP932”作为编码名称,而不是“shift-JIS”,以获得预期的结果:0x5C → “\”和 0x7E → “~”。否则,这些将被转换为错误的字符。

[Tip] 提示

也可以使用 recode(1),它提供的功能比 iconv(1)fromdos(1)todos(1)frommac(1)tomac(1) 的组合功能还要多。有关更多信息,请参阅“info recode”。

11.1.2. 使用 iconv 检查文件是否为 UTF-8 编码

您可以使用 iconv(1) 按如下方式检查文本文件是否以 UTF-8 编码。

$ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found"
[Tip] 提示

在上面的示例中使用“--verbose”选项来查找第一个非 UTF-8 字符。

11.1.3. 使用 iconv 转换文件名

这是一个示例脚本,用于将单个目录中较旧操作系统下创建的文件名的编码转换为现代 UTF-8 编码。

#!/bin/sh
ENCDN=iso-8859-1
for x in *;
 do
 mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)"
done

应该通过 表 11.2,“编码值及其用法列表” 中的编码值设置“$ENCDN”变量。

对于更复杂的情况,请使用正确的编码作为 mount(8) 选项挂载包含此类文件名的文件系统(例如,磁盘驱动器上的分区)(请参阅 第 8.3.6 节,“文件名编码”),并使用“cp -a”命令将其全部内容复制到另一个以 UTF-8 挂载的文件系统。

11.1.4. EOL 转换

文本文件格式,特别是行尾 (EOL) 代码,取决于平台。

表 11.3. 不同平台的 EOL 样式列表

平台 EOL 代码 控制字符 十进制 十六进制
Debian (unix) LF ^J 10 0A
MSDOS 和 Windows CR-LF ^M^J 13 10 0D 0A
Apple 的 Macintosh CR ^M 13 0D

EOL 格式转换程序 fromdos(1)todos(1)frommac(1)tomac(1) 非常方便。recode(1) 也很有用。

[Note] 注意

Debian 系统上的一些数据,例如 python-moinmoin 软件包的 wiki 页面数据,使用 MSDOS 样式的 CR-LF 作为 EOL 代码。因此,上述规则只是一般规则。

[Note] 注意

大多数编辑器(例如 vimemacsgedit 等)都可以透明地处理 MSDOS 样式 EOL 中的文件。

[Tip] 提示

当您要将 EOL 样式从混合的 MSDOS 和 Unix 样式统一为 MSDOS 样式时,使用“sed -e '/\r$/!s/$/\r/'”而不是 todos(1) 更好。(例如,在使用 diff3(1) 合并 2 个 MSDOS 样式文件后。)这是因为 todos 会向所有行添加 CR。

11.1.5. TAB 转换

很少有流行的专用程序来转换制表符代码。

表 11.4. 来自 bsdmainutilscoreutils 软件包的 TAB 转换命令列表

功能 bsdmainutils coreutils
将制表符展开为空格 col -x expand
从空格取消展开制表符 col -h unexpand

来自 indent 软件包的 indent(1) 完全重新格式化 C 程序中的空格。

编辑器程序(如 vimemacs)也可以用于 TAB 转换。例如,使用 vim,您可以使用“:set expandtab”和“:%retab”命令序列展开 TAB。您可以使用“:set noexpandtab”和“:%retab!”命令序列恢复此操作。

11.1.6. 带有自动转换功能的编辑器

智能的现代编辑器(如 vim 程序)非常智能,可以很好地处理任何编码系统和任何文件格式。您应该在 UTF-8 区域设置下在支持 UTF-8 的控制台中使用这些编辑器,以获得最佳兼容性。

可以简单地使用 vim 编辑以 latin1 (iso-8859-1) 编码存储的旧西欧 Unix 文本文件“u-file.txt”,方法如下。

$ vim u-file.txt

这是可能的,因为 vim 中文件编码的自动检测机制首先假定为 UTF-8 编码,如果失败,则假定为 latin1。

可以使用 vim 编辑以 latin2 (iso-8859-2) 编码存储的旧波兰 Unix 文本文件“pu-file.txt”,方法如下。

$ vim '+e ++enc=latin2 pu-file.txt'

可以使用 vim 编辑以 eucJP 编码存储的旧日语 unix 文本文件“ju-file.txt”,方法如下。

$ vim '+e ++enc=eucJP ju-file.txt'

可以使用 vim 编辑以所谓的 shift-JIS 编码(更准确地说:CP932)存储的旧日语 MS-Windows 文本文件“jw-file.txt”,方法如下。

$ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'

当使用“++enc”和“++ff”选项打开文件时,Vim 命令行中的“:w”以原始格式存储该文件并覆盖原始文件。您还可以在 Vim 命令行中指定保存格式和文件名,例如“:w ++enc=utf8 new.txt”。

请参阅 vim 在线帮助中的 mbyte.txt “多字节文本支持”以及 表 11.2,“编码值及其用法列表”,了解与“++enc”一起使用的区域设置值。

emacs 系列程序可以执行等效的功能。

11.1.7. 纯文本提取

以下内容将网页读入文本文件。这在从 Web 复制配置或在网页上应用基本的 Unix 文本工具(如 grep(1))时非常有用。

$ w3m -dump http://www.remote-site.com/help-info.html >textfile

类似地,您可以使用以下方法从其他格式提取纯文本数据。

表 11.5. 提取纯文本数据的工具列表

软件包 popcon 大小 关键词 功能
w3m http://qa.debian.org/popcon.php?package=w3m 1825 html→text HTML 到文本转换器,带有“w3m -dump”命令
html2text http://qa.debian.org/popcon.php?package=html2text 248 html→text 高级 HTML 到文本转换器 (ISO 8859-1)
lynx http://qa.debian.org/popcon.php?package=lynx 242 html→text HTML 到文本转换器,带有“lynx -dump”命令
elinks http://qa.debian.org/popcon.php?package=elinks 1364 html→text HTML 到文本转换器,带有“elinks -dump”命令
links http://qa.debian.org/popcon.php?package=links 1275 html→text HTML 到文本转换器,带有“links -dump”命令
links2 http://qa.debian.org/popcon.php?package=links2 3092 html→text HTML 到文本转换器,带有“links2 -dump”命令
antiword http://qa.debian.org/popcon.php?package=antiword 560 MSWord→text,ps 将 MSWord 文件转换为纯文本或 ps
catdoc http://qa.debian.org/popcon.php?package=catdoc 2668 MSWord→text,TeX 将 MSWord 文件转换为纯文本或 TeX
pstotext http://qa.debian.org/popcon.php?package=pstotext 123 ps/pdf→text 从 PostScript 和 PDF 文件中提取文本
unhtml http://qa.debian.org/popcon.php?package=unhtml 76 html→text 从 HTML 文件中删除标记标签
odt2txt http://qa.debian.org/popcon.php?package=odt2txt 73 odt→text 从 OpenDocument 文本到文本的转换器

11.1.8. 突出显示和格式化纯文本数据

您可以使用以下方法突出显示和格式化纯文本数据。

表 11.6. 突出显示纯文本数据的工具列表

软件包 popcon 大小 关键词 描述
vim-runtime http://qa.debian.org/popcon.php?package=vim-runtime 22298 highlight Vim MACRO,用于使用“:source $VIMRUNTIME/syntax/html.vim”将源代码转换为 HTML
cxref http://qa.debian.org/popcon.php?package=cxref 1115 c→html 用于将 C 程序转换为 latex 和 HTML 的转换器(C 语言)
src2tex http://qa.debian.org/popcon.php?package=src2tex 1968 highlight 将许多源代码转换为 TeX(C 语言)
source-highlight http://qa.debian.org/popcon.php?package=source-highlight 1939 highlight 使用 highlight (C++) 将许多源代码转换为 HTML、XHTML、LaTeX、Texinfo、ANSI 彩色转义序列和 DocBook 文件
highlight http://qa.debian.org/popcon.php?package=highlight 726 highlight 使用 highlight (C++) 将许多源代码转换为 HTML、XHTML、RTF、LaTeX、TeX 或 XSL-FO 文件
grc http://qa.debian.org/popcon.php?package=grc 232 text→color 通用的所有内容着色器 (Python)
txt2html http://qa.debian.org/popcon.php?package=txt2html 296 text→html 文本到 HTML 转换器 (Perl)
markdown http://qa.debian.org/popcon.php?package=markdown 96 text→html markdown 文本格式化程序,用于 (X)HTML (Perl)
asciidoc http://qa.debian.org/popcon.php?package=asciidoc 3165 text→any AsciiDoc 文本格式化程序,用于 XML/HTML (Python)
python-docutils http://qa.debian.org/popcon.php?package=python-docutils 1548 text→any ReStructured Text 文档格式化程序,用于 XML (Python)
txt2tags http://qa.debian.org/popcon.php?package=txt2tags 1152 text→any 从文本到 HTML、SGML、LaTeX、手册页、MoinMoin、Magic Point 和 PageMaker 的文档转换 (Python)
udo http://qa.debian.org/popcon.php?package=udo 556 text→any 通用文档 - 文本处理实用程序(C 语言)
stx2any http://qa.debian.org/popcon.php?package=stx2any 484 text→any 从结构化纯文本到其他格式的文档转换器 (m4)
rest2web http://qa.debian.org/popcon.php?package=rest2web 576 text→html 从 ReStructured Text 到 html 的文档转换器 (Python)
aft http://qa.debian.org/popcon.php?package=aft 259 text→any “自由格式”文档准备系统 (Perl)
yodl http://qa.debian.org/popcon.php?package=yodl 409 text→any 预文档语言和处理它的工具(C 语言)
sdf http://qa.debian.org/popcon.php?package=sdf 1414 text→any 简单文档解析器 (Perl)
sisu http://qa.debian.org/popcon.php?package=sisu 9149 text→any 文档结构化、发布和搜索框架 (Ruby)

11.2. XML 数据

可扩展标记语言 (XML) 是一种用于包含结构化信息的文档的标记语言。

请参阅 XML.COM 上的介绍性信息。

11.2.1. XML 的基本提示

XML 文本看起来有点像 HTML。它使我们能够管理文档的多种输出格式。一个简单的 XML 系统是 docbook-xsl 软件包,这里使用了它。

每个 XML 文件都以标准 XML 声明开头,如下所示。

<?xml version="1.0" encoding="UTF-8"?>

一个 XML 元素的基本语法标记如下。

<name attribute="value">content</name>

内容为空的 XML 元素以下列简短形式标记。

<name attribute="value"/>

以上示例中的“attribute="value"”是可选的。

XML 中的注释部分标记如下。

<!-- comment -->

除了添加标记之外,XML 还需要使用以下字符的预定义实体对内容进行少量转换。

表 11.7. XML 的预定义实体列表

预定义实体 要转换的字符
&quot; " : 引号
&apos; ' : 撇号
&lt; < : 小于号
&gt; > : 大于号
&amp; & : & 符号

[Caution] 注意

<”或“&”不能在属性或元素中使用。

[Note] 注意

当使用 SGML 样式用户定义的实体(例如“&some-tag:”)时,第一个定义优先于其他定义。实体定义在“<!ENTITY some-tag "entity value">”中表示。

[Note] 注意

只要 XML 标记与某些标签名称集(作为内容或属性值)一致地完成,使用 可扩展样式表语言转换 (XSLT) 转换为另一个 XML 就是一项简单的任务。

11.2.2. XML 处理

有许多工具可用于处理 XML 文件,例如 可扩展样式表语言 (XSL)

基本上,一旦您创建了格式良好的 XML 文件,您就可以使用 可扩展样式表语言转换 (XSLT) 将其转换为任何格式。

可扩展样式表语言格式化对象 (XSL-FO) 应该用于格式化。fop 软件包仍在 Debian contrib(非 main)存档中。因此,LaTeX 代码通常从 XML 使用 XSLT 生成,并且 LaTeX 系统用于创建可打印文件,例如 DVI、PostScript 和 PDF。

表 11.8. XML 工具列表

软件包 popcon 大小 关键词 描述
docbook-xml http://qa.debian.org/popcon.php?package=docbook-xml 2488 xml DocBook 的 XML 文档类型定义 (DTD)
xsltproc http://qa.debian.org/popcon.php?package=xsltproc 165 xslt XSLT 命令行处理器(XML→ XML、HTML、纯文本等)
docbook-xsl http://qa.debian.org/popcon.php?package=docbook-xsl 11589 xml/xslt 用于使用 XSLT 将 DocBook XML 处理为各种输出格式的 XSL 样式表
xmlto http://qa.debian.org/popcon.php?package=xmlto 134 xml/xslt 带有 XSLT 的 XML 到任何格式的转换器
dblatex http://qa.debian.org/popcon.php?package=dblatex 6799 xml/xslt 使用 XSLT 将 Docbook 文件转换为 DVI、PostScript、PDF 文档
fop http://qa.debian.org/popcon.php?package=fop 90 xml/xsl-fo 将 Docbook XML 文件转换为 PDF

由于 XML 是 标准通用标记语言 (SGML) 的子集,因此可以使用 SGML 的广泛工具对其进行处理,例如 文档样式语义和规范语言 (DSSSL)

表 11.9. DSSL 工具列表

软件包 popcon 大小 关键词 描述
openjade http://qa.debian.org/popcon.php?package=openjade 1063 dsssl ISO/IEC 10179:1996 标准 DSSSL 处理器(最新)
openjade1.3 http://qa.debian.org/popcon.php?package=openjade1.3 2226 dsssl ISO/IEC 10179:1996 标准 DSSSL 处理器(1.3.x 系列)
jade http://qa.debian.org/popcon.php?package=jade 872 dsssl James Clark 的原始 DSSSL 处理器(1.2.x 系列)
docbook-dsssl http://qa.debian.org/popcon.php?package=docbook-dsssl 3100 xml/dsssl 用于使用 DSSSL 将 DocBook XML 处理为各种输出格式的 DSSSL 样式表
docbook-utils http://qa.debian.org/popcon.php?package=docbook-utils 220 xml/dsssl DocBook 文件的实用程序,包括使用 DSSSL 的 docbook2* 命令转换为其他格式(HTML、RTF、PS、man、PDF)
sgml2x http://qa.debian.org/popcon.php?package=sgml2x 216 SGML/dsssl 使用 DSSSL 样式表从 SGML 和 XML 进行转换

[Tip] 提示

GNOMEyelp 有时可以直接读取 DocBook XML 文件,因为它在 X 上呈现得不错,这非常方便。

11.2.3. XML 数据提取

您可以使用以下方法从其他格式提取 HTML 或 XML 数据。

表 11.10. XML 数据提取工具列表

软件包 popcon 大小 关键词 描述
wv http://qa.debian.org/popcon.php?package=wv 351 MSWord→any 从 Microsoft Word 到 HTML、LaTeX 等的文档转换器。
texi2html http://qa.debian.org/popcon.php?package=texi2html 2076 texi→html 从 Texinfo 到 HTML 的转换器
man2html http://qa.debian.org/popcon.php?package=man2html 180 manpage→html 从手册页到 HTML 的转换器(CGI 支持)
tex4ht http://qa.debian.org/popcon.php?package=tex4ht 515 tex↔html (La)TeX 和 HTML 之间的转换器
xlhtml http://qa.debian.org/popcon.php?package=xlhtml 184 MSExcel→html 从 MSExcel .xls 到 HTML 的转换器
ppthtml http://qa.debian.org/popcon.php?package=ppthtml 120 MSPowerPoint→html 从 MSPowerPoint 到 HTML 的转换器
unrtf http://qa.debian.org/popcon.php?package=unrtf 224 rtf→html 从 RTF 到 HTML 等的文档转换器
info2www http://qa.debian.org/popcon.php?package=info2www 156 info→html 从 GNU info 到 HTML 的转换器(CGI 支持)
ooo2dbk http://qa.debian.org/popcon.php?package=ooo2dbk 941 sxw→xml 从 OpenOffice.org SXW 文档到 DocBook XML 的转换器
wp2x http://qa.debian.org/popcon.php?package=wp2x 156 WordPerfect→any WordPerfect 5.0 和 5.1 文件到 TeX、LaTeX、troff、GML 和 HTML
doclifter http://qa.debian.org/popcon.php?package=doclifter 460 troff→xml 从 troff 到 DocBook XML 的转换器

对于非 XML HTML 文件,您可以将它们转换为 XHTML,XHTML 是格式良好的 XML 的一个实例。XHTML 可以通过 XML 工具进行处理。

表 11.11. XML 漂亮打印工具列表

软件包 popcon 大小 关键词 描述
libxml2-utils http://qa.debian.org/popcon.php?package=libxml2-utils 139 xml↔html↔xhtml 带有 xmllint(1) 的命令行 XML 工具(语法检查、重新格式化、lint 等)
tidy http://qa.debian.org/popcon.php?package=tidy 82 xml↔html↔xhtml HTML 语法检查器和重新格式化程序

生成正确的 XML 后,您可以使用 XSLT 技术根据标记上下文等提取数据。

11.3. 可打印数据

可打印数据在 Debian 系统上以 PostScript 格式表示。通用 Unix 打印系统 (CUPS) 使用 Ghostscript 作为其非 PostScript 打印机的光栅化后端程序。

11.3.1. Ghostscript

可打印数据操作的核心是 Ghostscript PostScript (PS) 解释器,它生成栅格图像。

来自 Artifex 的最新上游 Ghostscript 已从 AFPL 重新许可为 GPL,并将所有最新的 ESP 版本更改(例如 CUPS 相关的更改)在 8.60 版本中合并为统一版本。

表 11.12. Ghostscript PostScript 解释器列表


[Tip] 提示

gs -h”可以显示 Ghostscript 的配置。

11.3.2. 合并两个 PS 或 PDF 文件

您可以使用 Ghostscript 的 gs(1) 合并两个 PostScript (PS)可移植文档格式 (PDF) 文件。

$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
[Note] 注意

PDF 是一种广泛使用的跨平台可打印数据格式,本质上是压缩的 PS 格式,具有一些额外的功能和扩展。

[Tip] 提示

对于命令行,psutils 软件包中的 psmerge(1) 和其他命令对于操作 PostScript 文档很有用。pdfjam 软件包中的命令以类似的方式工作,用于操作 PDF 文档。pdftk 软件包中的 pdftk(1) 也可用于操作 PDF 文档。

11.3.3. 可打印数据实用程序

以下用于可打印数据实用程序的软件包引起了我的注意。

表 11.13. 可打印数据实用程序列表

软件包 popcon 大小 关键词 描述
poppler-utils http://qa.debian.org/popcon.php?package=poppler-utils 542 pdf→ps,text,… PDF 实用程序:pdftopspdfinfopdfimagespdftotextpdffonts
psutils http://qa.debian.org/popcon.php?package=psutils 243 ps→ps PostScript 文档转换工具
poster http://qa.debian.org/popcon.php?package=poster 80 ps→ps 从 PostScript 页面创建大型海报
enscript http://qa.debian.org/popcon.php?package=enscript 2147 text→ps, html, rtf 将 ASCII 文本转换为 PostScript、HTML、RTF 或美化打印
a2ps http://qa.debian.org/popcon.php?package=a2ps 4292 文本→ps “Anything to PostScript”转换器和美化打印器
pdftk http://qa.debian.org/popcon.php?package=pdftk 3039 pdf→pdf PDF 文档转换工具:pdftk
mpage http://qa.debian.org/popcon.php?package=mpage 224 文本,ps→ps 每张纸打印多页
html2ps http://qa.debian.org/popcon.php?package=html2ps 320 html→ps 从 HTML 到 PostScript 的转换器
pdfjam http://qa.debian.org/popcon.php?package=pdfjam 122 pdf→pdf PDF 文档转换工具:pdf90pdfjoinpdfnup
gnuhtml2latex http://qa.debian.org/popcon.php?package=gnuhtml2latex 53 html→latex 从 html 到 latex 的转换器
latex2rtf http://qa.debian.org/popcon.php?package=latex2rtf 508 latex→rtf 将文档从 LaTeX 转换为可由 MS Word 读取的 RTF
ps2eps http://qa.debian.org/popcon.php?package=ps2eps 136 ps→eps 从 PostScript 到 EPS (Encapsulated PostScript) 的转换器
e2ps http://qa.debian.org/popcon.php?package=e2ps 188 文本→ps 带有日语编码支持的文本到 PostScript 转换器
impose+ http://qa.debian.org/popcon.php?package=impose+ 180 ps→ps PostScript 实用程序
trueprint http://qa.debian.org/popcon.php?package=trueprint 188 文本→ps 将许多源代码(C、C++、Java、Pascal、Perl、Pike、Sh 和 Verilog)美化打印到 PostScript。(C 语言)
pdf2svg http://qa.debian.org/popcon.php?package=pdf2svg 60 ps→svg 从 PDF 到 可缩放矢量图形 格式的转换器
pdftoipe http://qa.debian.org/popcon.php?package=pdftoipe 91 ps→ipe 从 PDF 到 IPE 的 XML 格式的转换器

11.3.4. 使用 CUPS 打印

通用 Unix 打印系统 (CUPS) 提供的 lp(1)lpr(1) 命令都提供了自定义打印可打印数据的选项。

您可以使用以下命令之一打印 3 份已整理的文件。

$ lp -n 3 -o Collate=True filename
$ lpr -#3 -o Collate=True filename

您可以通过使用打印机选项(例如“-o number-up=2”、“-o page-set=even”、“-o page-set=odd”、“-o scaling=200”、“-o natural-scaling=200”等)来进一步自定义打印机操作,这些选项记录在 命令行打印和选项 中。

11.4. 排版

最初由 AT&T 开发的 Unix troff 程序可用于简单排版。它通常用于创建手册页。

Donald Knuth 创建的 TeX 是非常强大的排版工具,并且是事实上的标准。LaTeX 最初由 Leslie Lamport 编写,可以高级别地访问 TeX 的强大功能。

表 11.14. 排版工具列表

软件包 popcon 大小 关键词 描述
texlive http://qa.debian.org/popcon.php?package=texlive 103 (La)TeX 用于排版、预览和打印的 TeX 系统
groff http://qa.debian.org/popcon.php?package=groff 8095 troff GNU troff 文本格式化系统

11.4.1. roff 排版

传统上,roff 是主要的 Unix 文本处理系统。请参阅 roff(7)groff(7)groff(1)grotty(1)troff(1)groff_mdoc(7)groff_man(7)groff_ms(7)groff_me(7)groff_mm(7) 和 “info groff”。

您可以通过安装 groff 软件包,在 “/usr/share/doc/groff/” 中阅读或打印有关 “-me 的良好教程和参考。

[Tip] 提示

groff -Tascii -me -” 生成带有 ANSI 转义码 的纯文本输出。如果您希望获得带有许多 “^H” 和 “_” 的类似手册页的输出,请改用 “GROFF_NO_SGR=1 groff -Tascii -me -”。

[Tip] 提示

要从 groff 生成的文本文件中删除 “^H” 和 “_”,请使用 “col -b -x” 进行过滤。

11.4.2. TeX/LaTeX

TeX Live 软件发行版提供了完整的 TeX 系统。texlive 元软件包提供了 TeX Live 软件包的合理选择,这些软件包应足以满足最常见的任务。

有许多关于 TeXLaTeX 的参考资料。

  • teTeX HOWTO:Linux-teTeX 本地指南

  • tex(1)

  • latex(1)

  • “The TeXbook”,作者 Donald E. Knuth,(Addison-Wesley)

  • “LaTeX - 文档准备系统”,作者 Leslie Lamport,(Addison-Wesley)

  • “The LaTeX Companion”,作者 Goossens、Mittelbach、Samarin,(Addison-Wesley)

这是最强大的排版环境。许多 SGML 处理器使用它作为其后端文本处理器。Lyxlyx 软件包提供,GNU TeXmacstexmacs 软件包提供,为 LaTeX 提供了不错的 WYSIWYG 编辑环境,而许多人使用 EmacsVim 作为源代码编辑器的选择。

有许多在线资源可用。

当文档变得更大时,有时 TeX 可能会导致错误。您必须增加 “/etc/texmf/texmf.cnf” 中的池大小(或更适当地编辑 “/etc/texmf/texmf.d/95NonPath” 并运行 update-texmf(8))来解决此问题。

[Note] 注意

“The TeXbook” 的 TeX 源代码可在 http://tug.ctan.org/tex-archive/systems/knuth/dist/tex/texbook.tex 获得。

该文件包含大多数必需的宏。我听说您可以通过注释掉第 7 行到第 10 行并添加 “\input manmac \proofmodefalse” 后,使用 tex(1) 处理此文档。强烈建议购买本书(以及 Donald E. Knuth 的所有其他书籍),而不是使用在线版本,但源代码是 TeX 输入的一个很好的例子!

11.4.3. 美化打印手册页

您可以使用以下命令之一以 PostScript 格式精美地打印手册页。

$ man -Tps some_manpage | lpr
$ man -Tps some_manpage | mpage -2 | lpr

第二个示例在一张纸上打印 2 页。

11.4.4. 创建手册页

虽然可以用纯 troff 格式编写手册页 (manpage),但有一些辅助软件包可以创建它。

表 11.15. 帮助创建手册页的软件包列表

软件包 popcon 大小 关键词 描述
docbook-to-man http://qa.debian.org/popcon.php?package=docbook-to-man 213 SGML→manpage 从 DocBook SGML 转换为 roff man 宏的转换器
help2man http://qa.debian.org/popcon.php?package=help2man 485 文本→manpage 从 --help 自动生成手册页
info2man http://qa.debian.org/popcon.php?package=info2man 161 info→manpage 从 GNU info 转换为 POD 或 man 页面的转换器
txt2man http://qa.debian.org/popcon.php?package=txt2man 88 文本→manpage 将纯 ASCII 文本转换为 man 页面格式

11.5. 邮件数据转换

以下用于邮件数据转换的软件包引起了我的注意。

表 11.16. 帮助邮件数据转换的软件包列表

软件包 popcon 大小 关键词 描述
sharutils http://qa.debian.org/popcon.php?package=sharutils 1408 mail shar(1), unshar(1), uuencode(1), uudecode(1)
mpack http://qa.debian.org/popcon.php?package=mpack 109 MIME 编码器和解码器 MIME 消息:mpack(1)munpack(1)
tnef http://qa.debian.org/popcon.php?package=tnef 132 ms-tnef 解包类型为 “application/ms-tnef” 的 MIME 附件,这是一种仅限 Microsoft 的格式
uudeview http://qa.debian.org/popcon.php?package=uudeview 117 mail 以下格式的编码器和解码器:uuencodexxencodeBASE64quoted printableBinHex
readpst http://qa.debian.org/popcon.php?package=readpst 228 PST 将 Microsoft Outlook PST 文件 转换为 mbox 格式

[Tip] 提示

如果邮件客户端软件也可以配置为使用 IMAP4 服务器,则可以使用 Internet 消息访问协议 版本 4 (IMAP4) 服务器(请参阅 第 6.7 节,“POP3/IMAP4 服务器”)将邮件从专有邮件系统中移出。

11.5.1. 邮件数据基础知识

邮件 (SMTP) 数据应限制为 7 位。因此,二进制数据和 8 位文本数据使用 多用途 Internet 邮件扩展 (MIME) 和字符集选择(请参阅 第 8.3.1 节,“编码基础知识”)编码为 7 位格式。

标准邮件存储格式是根据 RFC2822(更新的 RFC822) 格式化的 mbox。请参阅 mbox(5)(由 mutt 软件包提供)。

对于欧洲语言,由于 8 位字符不多,因此通常将带有 ISO-8859-1 字符集的“Content-Transfer-Encoding: quoted-printable”用于邮件。如果欧洲文本以 UTF-8 编码,则可能会使用 “Content-Transfer-Encoding: quoted-printable”,因为它主要是 7 位数据。

对于日语,传统上通常使用 “Content-Type: text/plain; charset=ISO-2022-JP” 用于邮件,以将文本保持在 7 位。但是较旧的 Microsoft 系统可能会在没有正确声明的情况下以 Shift-JIS 发送邮件数据。如果日语文本以 UTF-8 编码,则很可能会使用 Base64,因为它包含许多 8 位数据。其他亚洲语言的情况类似。

[Note] 注意

如果您的非 Unix 邮件数据可以通过可以与 IMAP4 服务器对话的非 Debian 客户端软件访问,则您可以通过运行自己的 IMAP4 服务器(请参阅 第 6.7 节,“POP3/IMAP4 服务器”)将它们移出。

[Note] 注意

如果您使用其他邮件存储格式,则将它们移动到 mbox 格式是好的第一步。通用客户端程序(例如 mutt(1))可能对此很方便。

您可以使用 procmail(1)formail(1) 将邮箱内容拆分为每条消息。

可以使用 mpack 软件包中的 munpack(1)(或其他专用工具)解包每封邮件消息,以获取 MIME 编码的内容。

11.6. 图形数据工具

以下用于图形数据转换、编辑和组织工具的软件包引起了我的注意。

表 11.17. 图形数据工具列表

软件包 popcon 大小 关键词 描述
gimp http://qa.debian.org/popcon.php?package=gimp 15168 图像(位图) GNU 图像处理程序
imagemagick http://qa.debian.org/popcon.php?package=imagemagick 207 图像(位图) 图像处理程序
graphicsmagick http://qa.debian.org/popcon.php?package=graphicsmagick 4335 图像(位图) 图像处理程序 (imagemagick 的分支)
xsane http://qa.debian.org/popcon.php?package=xsane 702 图像(位图) 基于 GTK+ 的 SANE (Scanner Access Now Easy) 的 X11 前端
netpbm http://qa.debian.org/popcon.php?package=netpbm 3464 图像(位图) 图形转换工具
icoutils http://qa.debian.org/popcon.php?package=icoutils 160 png↔ico(位图) 转换 MS Windows 图标和光标与 PNG 格式之间 (favicon.ico)
scribus http://qa.debian.org/popcon.php?package=scribus 54492 ps/pdf/SVG/… Scribus DTP 编辑器
openoffice.org-draw http://qa.debian.org/popcon.php?package=openoffice.org-draw 164 图像(矢量) OpenOffice.org 办公套件 - 绘图
inkscape http://qa.debian.org/popcon.php?package=inkscape 80425 图像(矢量) SVG (可缩放矢量图形) 编辑器
dia-gnome http://qa.debian.org/popcon.php?package=dia-gnome 617 图像(矢量) 图表编辑器 (GNOME)
dia http://qa.debian.org/popcon.php?package=dia 617 图像(矢量) 图表编辑器 (Gtk)
xfig http://qa.debian.org/popcon.php?package=xfig 1597 图像(矢量) 用于在 X11 下交互生成图形的工具
pstoedit http://qa.debian.org/popcon.php?package=pstoedit 683 ps/pdf→图像(矢量) PostScript 和 PDF 文件到可编辑矢量图形转换器 (SVG)
libwmf-bin http://qa.debian.org/popcon.php?package=libwmf-bin 118 Windows/图像(矢量) Windows 图元文件(矢量图形数据)转换工具
fig2sxd http://qa.debian.org/popcon.php?package=fig2sxd 200 fig→sxd(矢量) 将 XFig 文件转换为 OpenOffice.org Draw 格式
unpaper http://qa.debian.org/popcon.php?package=unpaper 736 图像→图像 用于扫描页面的后处理工具,用于 OCR
tesseract-ocr http://qa.debian.org/popcon.php?package=tesseract-ocr 435 图像→文本 基于 HP 商业 OCR 引擎的免费 OCR 软件
tesseract-ocr-eng http://qa.debian.org/popcon.php?package=tesseract-ocr-eng 58870 图像→文本 OCR 引擎数据:用于英语文本的 tesseract-ocr 语言文件
gocr http://qa.debian.org/popcon.php?package=gocr 473 图像→文本 免费 OCR 软件
ocrad http://qa.debian.org/popcon.php?package=ocrad 255 图像→文本 免费 OCR 软件
gtkam http://qa.debian.org/popcon.php?package=gtkam 1255 图像(Exif) 操作数码相机照片文件 (GNOME) - GUI
gphoto2 http://qa.debian.org/popcon.php?package=gphoto2 1036 图像(Exif) 操作数码相机照片文件 (GNOME) - 命令行
kamera http://qa.debian.org/popcon.php?package=kamera 245 图像(Exif) 操作数码相机照片文件 (KDE)
jhead http://qa.debian.org/popcon.php?package=jhead 126 图像(Exif) 操作符合 Exif 标准的 JPEG(数码相机照片)文件的非图像部分
exif http://qa.debian.org/popcon.php?package=exif 212 图像(Exif) 用于显示 JPEG 文件中 EXIF 信息的命令行实用程序
exiftags http://qa.debian.org/popcon.php?package=exiftags 198 图像(Exif) 用于从数码相机 JPEG 文件读取 Exif 标签的实用程序
exiftran http://qa.debian.org/popcon.php?package=exiftran 91 图像(Exif) 转换数码相机 jpeg 图像
exifprobe http://qa.debian.org/popcon.php?package=exifprobe 484 图像(Exif) 从数码照片读取元数据
dcraw http://qa.debian.org/popcon.php?package=dcraw 424 图像(Raw)→ppm 解码原始数码相机图像
findimagedupes http://qa.debian.org/popcon.php?package=findimagedupes 123 图像→指纹 查找视觉上相似或重复的图像
ale http://qa.debian.org/popcon.php?package=ale 757 图像→图像 合并图像以提高保真度或创建马赛克
imageindex http://qa.debian.org/popcon.php?package=imageindex 171 图像(Exif)→html 从图像生成静态 HTML 图库
f-spot http://qa.debian.org/popcon.php?package=f-spot 8219 图像(Exif) 个人照片管理应用程序 (GNOME)
bins http://qa.debian.org/popcon.php?package=bins 2008 图像(Exif)→html 使用 XML 和 EXIF 标签生成静态 HTML 相册
gallery2 http://qa.debian.org/popcon.php?package=gallery2 46635 图像(Exif)→html 生成带有缩略图的可浏览 HTML 相册
outguess http://qa.debian.org/popcon.php?package=outguess 252 jpeg,png 通用 隐写术 工具
qcad http://qa.debian.org/popcon.php?package=qcad 31 DXF CAD 数据编辑器 (KDE)
blender http://qa.debian.org/popcon.php?package=blender 57306 blend, TIFF, VRML, … 用于动画等的 3D 内容编辑器
mm3d http://qa.debian.org/popcon.php?package=mm3d 5171 ms3d, obj, dxf, … 基于 OpenGL 的 3D 模型编辑器
open-font-design-toolkit http://qa.debian.org/popcon.php?package=open-font-design-toolkit 27 ttf, ps, … 开放字体设计元软件包
fontforge http://qa.debian.org/popcon.php?package=fontforge 6696 ttf, ps, … 用于 PS、TrueType 和 OpenType 字体的字体编辑器
xgridfit http://qa.debian.org/popcon.php?package=xgridfit 1060 ttf 用于 网格拟合提示 TrueType 字体的程序

[Tip] 提示

aptitude(8) 中使用正则表达式 “~Gworks-with::image” 搜索更多图像工具(请参阅 第 2.2.6 节,“使用 aptitude 的搜索方法选项”)。

虽然 gimp(1) 等 GUI 程序非常强大,但 imagemagick(1) 等命令行工具对于使用脚本自动化图像处理非常有用。

数码相机的事实图像文件格式是 可交换图像文件格式 (EXIF),它是带有附加元数据标签的 JPEG 图像文件格式。它可以保存日期、时间和相机设置等信息。

Lempel-Ziv-Welch (LZW) 无损数据压缩 专利已过期。现在可以在 Debian 系统上免费使用使用 LZW 压缩方法的 图形交换格式 (GIF) 实用程序。

[Tip] 提示

任何带有可移动记录介质的数码相机或扫描仪都可以通过 USB 存储 读取器与 Linux 一起使用,因为它遵循 相机文件系统设计规则 并使用 FAT 文件系统。请参阅 第 10.1.10 节,“可移动存储设备”

11.7. 其他数据转换

还有许多其他程序用于转换数据。以下软件包使用 aptitude(8) 中的正则表达式 “~Guse::converting” 引起了我的注意(请参阅 第 2.2.6 节,“使用 aptitude 的搜索方法选项”)。

表 11.18. 其他数据转换工具列表

软件包 popcon 大小 关键词 描述
alien http://qa.debian.org/popcon.php?package=alien 209 rpm/tgz→deb 用于将外国软件包转换为 Debian 软件包的转换器
freepwing http://qa.debian.org/popcon.php?package=freepwing 568 EB→EPWING 从 “Electric Book”(在日本流行)到单个 JIS X 4081 格式(EPWING V1 的子集)的转换器

您还可以使用以下方法从 RPM 格式中提取数据。

$ rpm2cpio file.src.rpm | cpio --extract