第 11 章 数据转换

下面是关于Debian 系统上可用的格式转化工具及其相关提示的信息。

基于标准的工具,是非常好用的,但支持的专有数据格式有限.

11.1. 文本数据转换工具

如下是文本数据转换工具。

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

软件包流行度大小关键词说明
libc6V:935, I:99912771字符集使用 iconv(1) 的不同语言环境(locale)之间的文本编码转换器 (基础的)
recodeV:3, I:25603字符集+换行不同语言环境(locale)之间的文本编码转换器(多功能的,更多别名和特性)
konwertV:1, I:54134字符集不同语言环境(locale)之间的文本编码转换器(高档的)
nkfV:0, I:11358字符集日语字符集翻译
tcsV:0, I:0518字符集字符集翻译
unaccentV:0, I:029字符集代替重音字符,使用和它们相当的非重音字符
tofrodosV:1, I:2555换行在 DOS 和 Unix 之间的文本格式转换: fromdos(1) 和 todos(1)
macutilsV:0, I:1298换行在 Macintosh 和 Unix 之间的文本格式转换: frommac(1) 和 tomac(1)

11.1.1. 用 iconv 命令来转换文本文件

[提示]提示

iconv(1) 是 libc6 软件包的一部分并且它可以在类 Unix 的系统上转换字符的编码。

你能够通过如下的命令用 iconv(1) 来转换文本文件的编码。

  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
CP850code page 850,用于西欧语言的微软 DOS 的带有图形的字符,ISO-8859-1 的变体
CP932code page 932, 日语 Microsoft Windows 的 Shift-JIS 变体
CP936code page 936,用于简体中文的微软操作系统风格的 GB2312GBK 或者 GB18030 的变体
CP949code page 949,用于韩语的微软操作系统风格的 EUC-KR 或者 Unified Hangul Code 的变体
CP950code page 950,用于繁体中文的微软操作系统风格的 Big5 的变体
CP1251code page 1251,用于西里尔字母的微软操作系统风格的编码
CP1252code page 1252,用于西欧语言的微软操作系统风格的 ISO-8859-15 的变体
KOI8-R用于西里尔字母的旧俄语 UNIX 标准
ISO-2022-JP日文邮件的标准编码,只使用 7 位字节
eucJP老的日文 UNIX 标准的 8 位字节,和 Shift-JIS 完全不同
Shift-JIS日文 JIS X 0208 附录 1 标准 (参见 CP932)
[注意]注意

一些编码只支持数据转换,它不能作为语言环境的值 (第 8.4.1 节 “编码的基础知识”)。

ASCIIISO-8859 这样适用于单字节的字符集,字符编码和字符集几乎指的是同一件事情。

对于多字符的字符集,比如说,用于日文的 JIS X 0213,或用于差不多所有语言的 Universal Character Set (UCS, Unicode, ISO-10646-1) , 有多种编码方案来序列化它们的字节数据。

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

对某些计算机厂家而言,code page 是作为字符编码表的同义词来使用。

[注意]注意

请注意,大部分编码系统共享 ASCII 的 7 位字符的同样编码,但也有一些列外。如果你从通常所说的 shift-JIS 编码格式,转化老的日文 C 语言程序和 URL 数据,到 UTF-8 格式,你需要使用 “CP932“ 作为编码名来代替 “shift-JIS“ 来得到期望的结果: 0x5C → “\“ 和 0x7E → “~“.否则,这些将被转化为错误的字符。

[提示]提示

recode(1) 也可能被使用并且不仅仅是 iconv(1),fromdos(1),todos(1),frommac(1) 和 tomac(1) 功能的结合。想要获得更多信息,请参见 “info recode“。

11.1.2. 用 iconv 检查文件是不是 UTF-8 编码

你能够通过如下命令用 iconv(1) 来检查一个文本文件是不是用 UTF-8 编码的。

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

在上面的例子中使用 “—verbose“ 参数来找到第一个 non-UTF-8 字符。

11.1.3. 使用 iconv 转换文件名

这里是一个示例脚步,在同一目录下,将在老的操作系统系统下创建的文件名编码,转换为现代 UTF-8.

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

$ENCDN“ 变量定义了在老的操作系统下,文件名使用的原始编码,见 表 11.2 “编码值和用法的列表”.

对于更加复杂的情况,请使用适当的编码作为 mount(8) 的选项(参见 第 8.4.6 节 “文件名编码”) 来挂载包含有这样文件名的文件系统(比如说,磁盘上的一个分区),使用 “cp -a“ 命令来拷贝它的整个内容到另外一个使用 UTF-8 挂载的文件系统上。

11.1.4. 换行符转换

文本文件的格式,特别是行尾(换行符)编码,有平台独立性。

表 11.3. 不同平台的换行符样式列表

平台换行符编码控制码十进制16 进制
Debian (unix)LF^J100A
MSDOS 和 WindowsCR-LF^M^J13 100D 0A
苹果的 MacintoshCR^M130D

换行符转换程序, fromdos(1), todos(1), frommac(1), 和 tomac(1), 是相当方便. recode(1) 也是有用的。

[注意]注意

在 Debian 系统上的一些数据,如 python-moinmoin 软件包的 wiki 页面数据,使用 MSDOS 式样的 CR-LF 作为换行符编码。所以,上面的规则仅仅是一个通用规则。

[注意]注意

大部分编辑器 (比如: vim, emacs, gedit, …) 能够透明处理 MSDOS 式样的换行符文件。

[提示]提示

对于混合 MSDOS 和 Unix 式样的文件,统一到 MSDOS 换行符式样,使用 “sed -e ‘/\r$/!s/$/\r/‘“ 代替 todos(1) 比较好。 (例如,在使用 diff3(1)移植两个 MSDOS 式样的文件后.)这是因为 todos 给所有的行增加 CR.

11.1.5. TAB 转换

这里有一些转换 TAB 代码的专业工具。

表 11.4. bsdmainutilscoreutils 包中的用于转换 TAB 的命令列表

功能bsdmainutilscoreutils
把制表符扩展成空格col -xexpand
将空格转换为制表符(unexpand)col -hunexpand

indent 包中的 indent(1) 命令能够重新格式化 C 程序中的空格。

例如 vimemacs 这样的编辑软件可以被用来扩展 TAB。就拿 vim 来说,你能够按顺序输入 “:set expandtab“ 和 “:%retab“ 命令来扩展 TAB。你也可以按顺序输入 :%set noexpandtab“ 和 “:%retab“ 命令来复原。

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

vim 这样的现代智能编辑器软件是相当聪明的并且能够处理任何编码系统以及任何文件格式。你应该在支持 UTF-8 编码的控制台上并在 UTF-8 环境下使用这些编辑器来获得最好的兼容性。

以 latin1(iso-8859-1)编码存储的旧西欧语言的 Unix 文本文件,“u-file.txt”,能通过如下所示的用 vim 轻易的编辑。

  1. $ vim u-file.txt

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

以 latin2(iso-8859-2) 编码存储的旧波兰语的 Unix 文本文件,“pu-file.txt”,能通过如下所示的用 vim 编辑。

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

以 eucJP 编码存储的旧日语的 Unix 文本文件,”ju-file.txt“,能通过如下所示的用 vim 编辑。

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

以所谓的 shift-JIS 编码 (更确切的说法是:CP932) 存储的旧日语 MS-Windows 文本文件,”jw-file.txt“,能通过如下所示的用 vim 编辑。

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

当一个文件用 vim 打开的时候带有 “++enc“ 和 “++ff“ 选项,在 Vim 命令行输入 “:w“ 命令会以原格式存储文件并且会覆盖原文件。你也可以在 Vim 命令行指定存储文件名及其格式,例如,”:w ++enc=utf8 new.txt“。

请查阅 vim 在线帮助中的 mbyte.txt,”多字节文本支持”和表 11.2 “编码值和用法的列表”来获得 “++enc“ 使用的本地值的信息。

emacs 家族的程序能够实现同样的功能。

11.1.7. 提取纯文本

如下所示读入 web 页面并把它转化成文本文件。当从 Web 中拷贝配置或者是在 web 页面中应用类似 grep(1) 的基础 Unix 文本工具时,以下命令是非常有用的。

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

同样,你可以使用如下所示的工具从其他格式提取纯文本数据。

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

软件包流行度大小关键词功能
w3mV:31, I:2842289html→text用 “w3m -dump“ 命令把 HTML 转化为文本的转换器
html2textV:3, I:33274html→text高级的 HTML 到文本文件的转换器 (ISO8859-1)
lynxV:13, I:981948html→text用 “lynx -dump“ 命令把 HTML 转化为文本的转化器
elinksV:6, I:281767html→text用 “elinks -dump“ 命令把 HTML 转化为文本的转换器
linksV:6, I:392249html→text用 “links -dump“ 命令把 HTML 转化为文本的转换器
links2V:1, I:155417html→text用 “links2 -dump“ 命令把 HTML 转化为文本的转换器
antiwordV:2, I:10589MSWord→text,ps转化 MSWord 文件到纯文本或 ps 文件
catdocV:27, I:127675MSWord→text,TeX转化 MSWord 文件到纯文本或 TeX文件
pstotextV:1, I:3126ps/pdf→text从 PostScript 和 PDF 文件里导出文本
unhtmlV:0, I:043html→text从一个 HTML 文件里面删除标记标签
odt2txtV:1, I:760odt→text从开放文档格式到文本格式的转化器

11.1.8. 高亮并格式化纯文本数据

你可以通过如下所示的来高亮并格式化纯文本数据。

表 11.6. 高亮纯文本数据的工具列表

软件包流行度大小关键词说明
vim-runtimeV:19, I:43531723高亮用 “:source $VIMRUNTIME/syntax/html.vim“ Vim 宏命令转化源代码到 HTML
cxrefV:0, I:01193c→html从 C 程序到 latex 和 HTML 的转换器(C语言)
src2texV:0, I:0622高亮转换许多源代码到 TeX(C语言)
source-highlightV:0, I:71992高亮转换源代码到带有高亮显示的 HTML, XHTML, LaTeX, Texinfo, ANSI 颜色转义序列和 DocBook 文件 (C++)
highlightV:1, I:121083高亮转化许多源代码到带有高亮显示的 HTML, XHTML, RTF, LaTeX, TeX or XSL-FO 文件。(C++)
grcV:0, I:3190text→有颜色的用于任何文本的通用颜色生成器 (Python)
txt2htmlV:0, I:3259text→html文本到 HTML 转换器(Perl)
markdownV:0, I:857text→htmlmarkdown 文本文档到 (X)HTML (Perl)
asciidocI:1381text→anyAsciiDoc 文本文档到 XML/HTML (Python)
pandocV:8, I:47151714text→any通用标记转化器 (Haskell)
python-docutilsV:12, I:1331771text→any重构文本文档到 XML (Python)
txt2tagsV:0, I:1342text→any转化文本到 HTML, SGML, LaTeX, man page, MoinMoin, Magic Point and PageMaker (Python)
udoV:0, I:0583text→any通用的文本文件转化工具 (C 语言)
stx2anyV:0, I:0264text→any结构化纯文本到其他格式的文档转化器 (m4)
rest2webV:0, I:0527text→html重构文本到 html 的文档转化器 (Python)
aftV:0, I:0235text→any“自由格式”的文件准备系统 (Perl)
yodlV:0, I:0610text→any用预文档语言工具来处理文件 (C 语言)
sdfV:0, I:01445text→any简单的文档剖析器 (Perl)
sisuV:0, I:05344text→any文档组织、排版、搜索框架 (Ruby)

11.2. XML 数据

扩展标记语言 Extensible Markup Language (XML) 是一种标记语言,用于含有结构化信息的文档。

XML.COM 查看介绍信息.

11.2.1. XML 的基本提示

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

每一个 XML 文件使用下面的标准 XML 声明开始。

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

XML 元素的基本语法是按下面的方式标记。

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

内容为空的 XML 元素,使用下面的短格式标记。

  1. <name attribute="value"/>

上面列子中的 “attribute="value"“ 是可选的。

XML 里面的注释部分,是按下面的方式标记。

  1. <!-- comment -->

不同于增加标记,XML 至少要求使用预定义实体里的内容来转化下列字符。

表 11.7. XML 预定义实体列表

预定义实体转化的字符
&quot; : 引号
&apos; : 撇号
&lt;< : 小于号
&gt;> : 大于号
&amp;& :&号
[小心]小心

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

[注意]注意

当 SGML 式样的用户定义实体,比如 “&some-tag:“, 被使用的时候,第一个定义会覆盖其它的。实体定义在 “<!ENTITY some-tag “entity value”>“里表示.

[注意]注意

只要 XML 标记是一致使用某一标签名集合(一些数据作为内容或属性值),使用 Extensible Stylesheet Language Transformations (XSLT) 来转换到另外一个 XML,是一个微不足道的任务。

11.2.2. XML 处理

有许多工具可以用于处理 XML 文件,比如说: 可扩展样式表语言 Extensible Stylesheet Language (XSL).

一旦你创建了一个好的成形的 XML 文件,基本上来讲,你就可以使用 可扩展样式表语言转换 Extensible Stylesheet Language Transformations (XSLT),将其转换成任何格式。

格式化对象的可扩展样式表语言 Extensible Stylesheet Language for Formatting Objects (XSL-FO) 是用来作为格式化的解决方案. fop 软件包比 Debian main 档案库要新,因为它依赖 Java 编程语言). LaTeX 代码通常是从 XML 使用 XSLT 生成,LaTeX 系统是用来创建 DVI, PostScript 和 PDF 这类可打印的文件。

表 11.8. XML 工具列表

软件包流行度大小关键词说明
docbook-xmlV:15, I:2802133xmlDocBook 的 XML 文档类型定义(DTD)
xsltprocV:15, I:104160xsltXSLT 命令行处理器 (XML→ XML, HTML, 纯文本,等等)
docbook-xslV:13, I:16514870xml/xslt使用 XSLT 将 DocBook XML 处理成各种输出格式的 XSL 样式表
xmltoV:1, I:23130xml/xslt使用 XSLT 将 XML 转换到任意格式的转换器
dbtoepubV:0, I:037xml/xsltDocBook XML 到 .epub 转换
dblatexV:3, I:164643xml/xslt使用 XSLT 将 Docbook 文件转换为 DVI, PostScript, PDF 文档
fopV:1, I:24291xml/xsl-fo转换 Docbook XML 文件到 PDF

由于 XML 是 标准通用标记语言 Standard Generalized Markup Language (SGML)的一个子集,用于处理 SGML 的扩展工具,也能够处理 XML,比如说 文档式样语言和规范语言 Document Style Semantics and Specification Language (DSSSL).

表 11.9. DSSSL 工具列表

软件包流行度大小关键词说明
openjadeV:2, I:381019dssslISO/IEC 10179:1996 标准 DSSSL 处理器 (最新的)
docbook-dssslV:1, I:232604xml/dsssl使用 DSSSL 处理 DocBook XML 到各种输出格式的 DSSSL 样式表
docbook-utilsV:0, I:16281xml/dssslDocBook 文件的工具包,包括使用 DSSSL 的转换成其它格式 (HTML, RTF, PS, man, PDF)的 docbook2* 命令
sgml2xV:0, I:090SGML/dssslSGML 和 XML 使用 DSSSL 样式表的转换器
[提示]提示

GNOMEyelp 往往能够方便的直接读取 DocBook XML 文件,这是因为它可以从 X 获得适当的渲染。

11.2.3. XML 数据提取

使用下面的方法,你能够从其它格式提取 HTML 或 XML 数据。

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

软件包流行度大小关键词说明
wvV:0, I:7717MSWord→任何格式从微软 Word 格式到 HTML, LaTeX, 等格式的文件转换器。
texi2htmlV:0, I:81833texi→html从 Texinfo 到 HTML 的转换器
man2htmlV:0, I:2138man 手册页→html从 man 手册页到 HTML 的转换器(支持 CGI)
unrtfV:0, I:4148rtf→html从 RTF 到 HTML 等的转换器
info2wwwV:1, I:376info→html从 GNU info 到 HTML 的转换器 (支持 CGI)
ooo2dbkV:0, I:0217sxw→xml从 OpenOffice.org SXW 文档到 DocBook XML 的转换器
wp2xV:0, I:0202WordPerfect→任意格式WordPerfect 5.0 和 5.1 文件到 TeX, LaTeX, troff, GML 和 HTML
doclifterV:0, I:0451troff→xmltroff 到 DocBook XML 的转换器

对于非 XML 的 HTML 文件,你能够转换它们为 XHTML,XHTML 是一个相当成型的 XML 实例。XHTML 能够被 XML 工具处理.

表 11.11. XML 美化打印工具列表

软件包流行度大小关键词说明
libxml2-utilsV:22, I:246182xml↔html↔xhtml使用 xmllint(1) 的 XML 命令行工具 (语法检查,重新格式化,梳理, …)
tidyV:2, I:1484xml↔html↔xhtmlHTML 语法检查和重新格式化

一旦适当的 XML 生成,基于标记的内容等,你能够使用 XSLT 技术提取数据。

11.3. 排版

Unix上的 troff 程序最初是由 AT&T 公司开发的,可以被用做简单排版。现在被用来创建手册页。

Donald Knuth 发明的 Tex 是非常强大的排版工具也是实际上的标准。最初是由 Leslie Lamport 开发的 LaTex 使得用户可以更为方便的利用 Tex 的强大功能。

表 11.12. 排版工具的列表

软件包流行度大小关键词说明
texliveV:3, I:5071(La)TeX用于排版、预览和打印的 TeX 系统
groffV:3, I:6411838troffGNU troff 文本格式化系统

11.3.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 软件包以后,你输入 “-me宏指令)就能看到一份不错的指导手册,它的位置是 “/usr/share/doc/groff/“。

[提示]提示

groff -Tascii -me -“ 输出带有 ANSI 转义码的纯文本。如果你想要 manpage 的输出带有许多 “^H” 和 “_”,那么使用替代命令 “GROFF_NO_SGR=1 groff -Tascii -me -“。

[提示]提示

如果想要移除 groff 生成的文本文件中的 “^H” 和 “_”,使用 “col -b -x“ 来过滤它。

11.3.2. TeX/LaTeX

Tex Live 软件提供了全部的 TeX 系统。texlive 元包只是 TeX Live 中的一部分,但是它足够应付日常任务。

这里有许多可用的 TeXLaTeX 的参考资料。

  • The teTeX HOWTO: The Linux-teTeX Local Guide

  • tex(1)

  • latex(1)

  • texdoc(1)

  • texdoctk(1)

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

  • “LaTeX - A Document Preparation System”, 作者 Leslie Lamport, (Addison-Wesley)

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

这是最强大的排版环境。许多 SGML 处理器把它作为其后台字处理工具。lyx 软件包提供的 Lyxtexmacs 软件包提供的 GNU TeXmacs 都为 LaTeX 提供了非常不错的所见即所得的编辑环境,然而许多人使用 EmacsVim) 作为其源代码编辑器。

有许多在线资源存在。

当文档变得更大时,TeX 有时会出错。你必须在 “/etc/texmf/texmf.cnf“ 中增加 pool 的大小 (更确切的说话是编辑是 “/etc/texmf/texmf.d/95NonPath“ 并且运行 update-texmf(8)) 来修复此问题。

[注意]注意

“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.3.3. 漂亮的打印手册页

你能够用如下任意一个命令在打印机上漂亮的打印手册页。

  1. $ man -Tps some_manpage | lpr

11.3.4. 创建手册页

尽管用纯 troff 格式写手册页(manpage)是可能的,这里还是有一些辅助的程序包用于创建手册页。

表 11.13. 创建手册页的工具列表

软件包流行度大小关键词说明
docbook-to-manV:0, I:13191SGML→man 手册页从 DocBook SGML 到 roff 手册页宏指令的转换器
help2manV:0, I:10498text→man 手册页通过 —help 参数自动生成手册页的工具
info2manV:0, I:0134info→man 手册页转换 GNU info 到 POD 或手册页的转换器
txt2manV:0, I:1114text→man 手册页把纯粹的 ASCII 文本转化为手册页格式

11.4. 可印刷的数据

在 Debian 系统中,可打印的数据是 PostScript 格式的。对于非 PostScript 打印机,通用 Unix 打印系统 (CUPS) 使用 Ghostscript 作为其后台光栅处理程序。

11.4.1. Ghostscript

处理可印刷的数据的核心是 Ghostscript PostScript 解释器,它能够生成光栅图像。

来自 Artifex 的最新上游 Ghostscript 软件包的许可从 AFPL 变成 GPL,并且发布的是合并版本,其中合并了最新的 ESP 版本的改变,例如 CUPS 8.60版本。

表 11.14. Ghostscript PostScript 解释器列表

软件包流行度大小说明
ghostscriptV:252, I:598231GPL Ghostscript PostScript/PDF 解释器
ghostscript-xV:15, I:65223GPL Ghostscript PostScript/PDF 解释器-X 显示支持
libpoppler95I:34172PDF 渲染库 (xpdf PDF 浏览器的分支)
libpoppler-glib8V:217, I:481449PDF 渲染库(基于 Glib 的共享库)
poppler-dataV:111, I:63713090用于 PDF 渲染库的 CMaps (CJK 支持:Adobe-*)
[提示]提示

gs -h“ 能够显示 Ghostscript 的配置信息。

11.4.2. 合并两个 PS 或 PDF 文件

你能够使用 Ghostscript 中的 gs(1) 来合并两个 PostScript(PS)可移植文档格式(PDF) 文件。

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

PDF 是用途很广的跨平台可印刷的数据格式,它本质上是带有一些额外特性和扩展的压缩了的 PS 格式。

[提示]提示

对于命令行来说,psmerge(1) 和 psutils 包中的其他命令在处理 PostScript 文档时是很有用的。pdftk 包中的 pdftk(1) 在处理 PDF 文档的时候同样是很好用的。

11.4.3. 处理可印刷数据的工具

如下是处理可印刷数据的工具列表。

表 11.15. 处理可印刷数据的工具列表

软件包流行度大小关键词说明
poppler-utilsV:241, I:434689pdf→ps,text,…PDF 工具:pdftops, pdfinfo, pdfimages, pdftotext, pdffonts
psutilsV:6, I:105219ps→psPostScript 文件转换工具
posterV:0, I:558ps→ps用 PostScript 页制作大型海报
enscriptV:1, I:202132text→ps, html, rtf转化 ASCII 文本到 PostScript, HTML, RTF 或 Pretty-Print
a2psV:1, I:153651text→ps‘任何文本到 PostScript’ 的转换器并且也是相当不错的打印程序
pdftkI:5128pdf→pdfPDF 文档转换工具:pdftk
html2psV:0, I:3249html→ps从 HTML 到 PostScript 的转换器
gnuhtml2latexV:0, I:127html→latex从 html 到 latex 的转换器
latex2rtfV:0, I:6480latex→rtf转换 LaTeX 文档到能被 Microsoft Word 读取的 RTF 格式的文档
ps2epsV:3, I:6898ps→eps从 PostScript 到 EPS(Encapsulated PostScript)的转换器
e2psV:0, I:0109text→ps带有日文编码支持的文本到 PostScript 转换器
impose+V:0, I:0119ps→psPostScript 工具
trueprintV:0, I:0146text→ps漂亮的打印许多源程序(C, C++, Java, Pascal, Perl, Pike, Sh, 和 Verilog)到 PostScript。(C 语言)
pdf2svgV:0, I:430ps→svgPDF 到可升级的向量图形格式的转换器
pdftoipeV:0, I:071ps→ipe从 PDF 到 IPE‘s XML 格式的转换器

11.4.4. 用 CUPS 打印

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

你可以使用下列命令中的一个来打印 3 份有装订页码的文件。

  1. $ lp -n 3 -o Collate=True filename
  1. $ 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.5. 邮件数据转换

下列邮件数据转换软件包捕获了我的眼球。

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

软件包流行度大小关键词说明
sharutilsV:4, I:551421邮件shar(1), unshar(1), uuencode(1), uudecode(1)
mpackV:1, I:18106MIME编码和解码 MIME 信息: mpack(1) 和 munpack(1)
tnefV:1, I:10110ms-tnef解包 MIME 附件类型 “application/ms-tnef”,该格式仅由微软使用
uudeviewV:0, I:5109邮件下列格式的编码器和解码器: uuencode, xxencode, BASE64, quoted printableBinHex
[提示]提示

如果邮件客户端可以配置使用 IMAP4 服务器,互联网消息访问协议 版本 4 (IMAP4) 服务器 (参见 第 6.7 节 “POP3/IMAP4 服务器”) 可以用来把邮件从专有邮件系统里面移出来。

11.5.1. 邮件数据基础

邮件 (SMTP) 数据需要被限制为 7 位数据序列。二进制数据和 8 位文本数据使用 Multipurpose Internet Mail Extensions (MIME) 互联网多用途邮件扩展 和选择的字符集编码到 7 位格式。(参见 第 8.4.1 节 “编码的基础知识”).

标准的邮件存储格式是 mbox,它是依据 RFC2822 (由 RFC822 更新) 来的格式. 参见 mbox(5) (由 mutt 软件包提供).

对于欧洲语言,由于没有什么 8 位字符,”Content-Transfer-Encoding: quoted-printable“ 加 ISO-8859-1 字符集通常被用于邮件。如果欧洲文本是被编码为 UTF-8,由于几乎全是 7 位数据,使用 “Content-Transfer-Encoding: quoted-printable“ 也是合适的。

对于日语,传统的 “Content-Type: text/plain; charset=ISO-2022-JP“ 通常被用于邮件来保持文本在 7 位。但是老的微软系统会在没有声明的情况下使用 Shift-JIS 来发送邮件。如果日语文本是用 UTF-8 编码, 由于含有许多 8 位数据,使用 Base64 是合适的。其它亚洲语言也是类似情形。

[注意]注意

如果你的非 Unix 邮件数据可以通过一个具备和 IMAP4 服务通讯的非 Debian 客户端访问,你可以通过运行你的 IMAP4 服务来将邮件数据移出。(参见 第 6.7 节 “POP3/IMAP4 服务器”).

[注意]注意

如果你使用其它邮件存储格式,第一步把它们移动到 mbox 格式比较好。像 mutt(1) 这样多功能的客户端程序可以便捷的完成这类操作。

你可以使用 procmail(1) 和 formail(1) 把邮箱内容分开成每一封邮件.

每一封邮件能够使用来自 mpack 软件包的 munpack(1) 命令(或其它特异的工具)来获得 MIME 编码内容。

11.6. 图形数据工具

如下是关于图形数据转换、编辑和管理的工具包。

表 11.17. 图形数据工具列表

软件包流行度大小关键词说明
gimpV:68, I:34122313图形(位图)GNU 图形处理程序
imagemagickI:400218图形(位图)图形处理程序
graphicsmagickV:3, I:175224图形(位图)图像处理程序(imagemagick派生出来的)
xsaneV:17, I:1732346图形(位图)用于 SANE 的基于 GTK+ 的前端图形界面 (现在访问扫描仪就很简单了)
netpbmV:32, I:4094302图形(位图)图形界面的转换工具
icoutilsV:21, I:127221png↔ico(bitmap)MS Windows 符号和光标转化为 PNG 格式,或者从 PNG 格式转化为位图格式 (favicon.ico)
scribusV:2, I:2330375ps/pdf/SVG/…Scribus DTP 编辑器
libreoffice-drawV:177, I:43414600图形(矢量)LibreOffice 办公套件-绘画
inkscapeV:55, I:20984823图形(矢量)SVG(可升级矢量图形)编辑器
diaV:5, I:313727图形(矢量)图表编辑器(Gtk)
xfigV:2, I:151793图形(矢量)在图形界面下,交互式的生成图像变得方便
pstoeditV:4, I:98988ps/pdf→image(矢量)PostScript 和 PDF 文件到可编辑的矢量图形的转换器(SVG)
libwmf-binV:10, I:211113Windows/image(矢量)Windows 元文件 (矢量图形数据) 转换工具
fig2sxdV:0, I:0149fig→sxd(矢量)转换 XFig 文件为 OpenOffice.org 绘画格式
unpaperV:2, I:19460image→image后处理 OCR 扫描页面的工具
tesseract-ocrV:8, I:371500image→text基于惠普的商业 OCR 引擎的免费 OCR 软件
tesseract-ocr-engV:7, I:374032image→textOCR 引擎数据:用于英文文本的 tesseract-ocr 语言文件
gocrV:1, I:13531image→text免费 OCR 软件
ocradV:0, I:5303image→text免费 OCR 软件
eogV:71, I:26410189图像(Exif)Eye of GNOME 图像浏览程序
gthumbV:5, I:225475图像(Exif)图像浏览器(GNOME)
geeqieV:6, I:2114643图像(Exif)基于 GTK+ 的图像浏览器
shotwellV:19, I:2236451图像(Exif)数码相片管理器(GNOME)
gtkamV:0, I:61154图像(Exif)从数码照相机中检索多媒体数据的应用 (GTK+)
gphoto2V:1, I:12955图像(Exif)gphoto2 软件是命令行方式的管理数码相机的工具
gwenviewV:28, I:9710570图像(Exif)图片浏览器(KDE)
kameraI:97798图像(Exif)KDE 上的支持数码相机的应用软件
digikamV:2, I:132646图像(Exif)用于 KDE 桌面环境的数字照片管理应用
exiv2V:3, I:44321图像(Exif)EXIF/IPTC 元数据处理工具
exiftranV:1, I:2170图像(Exif)改变数码照相机的 jpeg 图像格式
jheadV:1, I:11109图像(Exif)处理兼容 JPEG 文件 (数码相机图片) 的 Exif 中的非图形部分
exifV:1, I:12339图像(Exif)显示 JPEG 文件中的 EXIF 信息的命令行工具
exiftagsV:0, I:5292图像(Exif)从数码相机的 JPEG 文件读取 Exif 标签的实用工具
exifprobeV:0, I:4499图像(Exif)从数码图片中读取元数据
dcrawV:2, I:19535image(原始的)→ppm解码原始的数码相机图片
findimagedupesV:0, I:179image→fingerprint找到相似或重复的图像
aleV:0, I:0839image→image合并图像来增加保真度或者用于创建马赛克
imageindexV:0, I:2145image(Exif)→html从图形中创建静态 HTML 图库
outguessV:0, I:2261jpeg,png通用的 Steganographic 工具
librecadV:4, I:188205DXFCAD 数据编辑器(KDE)
blenderV:4, I:3879166blend, TIFF, VRML, …用于动画的 3D 编辑器
mm3dV:0, I:03778ms3d, obj, dxf, …基于 OpenGL 的 3D 模型编辑器
open-font-design-toolkitI:010ttf, ps, …用于开放字型设计的元包
fontforgeV:0, I:84191ttf, ps, …用于 PS,TrueType 和 OpenType 的字体编辑器
xgridfitV:0, I:0806ttf用于TrueType 字体的 网格拟合和小字还原技术 的程序
[提示]提示

在 aptitude(8) (参考第 2.2.6 节 “aptitude 搜索方式选项”)中用正则表达式 “~Gworks-with::image“ 来查找更多的图像工具。

虽然像 gimp(1) 这样的图形界面程序是非常强大的,但像 imagemagick(1) 这样的命令行工具在用脚本自动化处理图像时是很有用的。

实际上的数码相机的图像是可交换的图像文件格式(EXIF),这种格式是在 JPEG 图像文件格式上添加一些元数据标签。它能够保存诸如日期、时间和相机设置的信息。

The Lempel-Ziv-Welch (LZW)无损数据压缩专利已经过期了。使用 LZW 压缩方式的 图形交互格式(GIF)工具现在可以在 Debian 系统上自由使用了。

[提示]提示

任何带有可移动记录介质的数码相机或扫描仪都可以在 Linux 上通过 USB 存储读取器来工作,因为它遵循相机文件系统设计规则并且使用 FAT 文件系统,参考第 10.1.7 节 “可移动存储设备”

11.7. 不同种类的数据转换工具

这里有许多其他用于数据转换的工具。在 aptitude(8)(参考 第 2.2.6 节 “aptitude 搜索方式选项”) 里用正则表达式 “~Guse::converting"“ 来查找如下的软件包。

表 11.18. 不同种类的数据转换工具列表

软件包流行度大小关键词说明
alienV:2, I:34161rpm/tgz→deb把外来的软件包转换为 Debian 软件包
freepwingV:0, I:0421EB→EPWING把 “电子书” (在日本流行) 变成单一的 JIS X 4081 格式 (EPWING V1 的子集)
calibreV:9, I:3654876any→EPUB电子书转换器和库管理

你能够通过如下的命令从 RPM 格式的包中提取数据。

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