【背景】
之前就知道,可以用Docbook生成多种格式,其中包括纯文本格式。
后来又在DocBook XSL Stylesheets: Reference Documentation中看到了纯文本格式的例子:
而目前自己虽然已经可以用docbook生成了HTML和PDF,但是也想要弄个Plain Text,所以要去试试。
【折腾过程】
1.之前生成html和pdf的时候,对应所用的输出配置是docbook-xsl-ns-1.76.1下面的html和fo相关的文件。
所以也去找找其下是否有plain text方面的配置文件。
结果没有找到。
2.找到:4. Convert Docbook to plain text,看到其用了一个没听过的工具lynx 去将html转换为plain text,觉得不靠谱,所以没理会。
结果,在官网的解释Formatted plain text中,却也提到了这个工具。说是目前来说,还没有专门的xsl stylesheet来将docbook输出为plain text,而只能用间接的办法:
先转换为HTML,然后用基于文本的浏览器将HTML转换为plain text。
后者,目前有三种,分别是lynx,elinks,w3m。
3.后来自己用IE9打开自己生成的HTML,从File->Save As –> Save As Type选择为Text File (*.txt)后,也是可以实现将HTML另存为txt的。然后导出的txt的效果,也还可以:
只不过其中表格不支持:
以及表格中嵌套的表格,的显示更不太好:
但是也基本够用吧。所以,暂时就用IE导出HTML为txt的这个方法吧。
其他基于文本的浏览器,有空再试试。
4.打算继续折腾。然后无意间发现,lynx和w3m,都是已经在Cygwin中安装好了的。所以可以直接去用了。
而Elinks,是没找到,所以去Elinks的Download,下载了源码,然后去Cygwin下面编译。
先./configure然后再make,但是第一步执行的狂慢。。。。就先不等了。去试试其他两个。
(1)lynx
试了:
lynx.exe -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/lynx/MPEG_VBR.txt
是可以导出txt的,但是结果是乱码。
然后就去找,看看是否有encoding的参数,结果找到个相关的charset,然后试了试:
lynx.exe -assume_charset=UTF8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/lynx/MPEG_VBR_utf8.txt
结果生成的txt没乱码了,但是全部的中文字符,都没了,只剩英文了。该不会lynx不支持非英文的吧。。。
然后又试了试:
lynx.exe -assume_charset=UTF8 -assume_local_charset=UTF8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/lynx/MPEG_VBR_utf8_localUtf8.txt
结果效果还是和上面一样,没中文字符。
后来又试了试:
lynx.exe -assume_charset=UTF8 -assume_local_charset=UTF8 -display_charset=UTF8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/lynx/MPEG_VBR_utf8_localUtf8_displayUtf8.txt
输出结果,证实了是可以正常显示中文字符的。
而且也注意到了,其显示出来的表格,还是很不错的:
但是嵌套的表格显示不是很好:
虽然有点点瑕疵,但是总体来说还是不错的:
然后又仔细看了看相关的参数的解释:
-assume_charset=MIMEname charset for documents that don't specify it -assume_local_charset=MIMEname charset assumed for local files -assume_unrec_charset=MIMEname use this instead of unrecognized charsets -display_charset=MIMEname charset for the terminal output
基本上确定其含义是:
assume_charset指的是访问网络上的HTML的charset;
assume_local_charset指的是本地HTML的charset;
assume_unrec_charset指的是,有些字符,如果原charset中没有包含,无法识别,那么就用此charset;
display_charset指的是输出txt的charset;
所以此处:
assume_charset:由于我的是本地的HTML,所以不需要用;
assume_local_charset:由于我的本地HTML中已经有了charset=UTF-8,所以也不需要;
assume_unrec_charset:当前的UTF8已经包含了所有的字符集了,所以不会存在未识别字符,所以也不需要设置此参数;
display_charset:需要指定此输出的字符集为UTF8,这样中文字符才能正常显示。
所以就去用:
lynx.exe -display_charset=UTF8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/lynx/MPEG_VBR_displayUtf8.txt
这样也同样可以正确地,将本地的UTF8的HTML输出为UTF8的txt了。
【总结】
使用lynx从本地的UTF8的HTML导出UTF8的txt:
lynx.exe -display_charset=UTF8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/lynx/MPEG_VBR_displayUtf8.txt |
(2)w3m
试了试如下命令:
w3m -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/w3m/MPEG_VBR.txt
结果,不仅可以成功生成出来txt,而且自动可以识别输入和输出的编码。
更强的是,其表格支持的非常好,因为带嵌套的表格效果都很不错:
并且连文章最开始的revhistory的部分都有表格支持:
可以帅呆了。
这样的话,看来其他工具,比如elinks,估计不太可能再好了吧。
不过,也还是要找机会试试elinks的。
(3)links
安装的cygwin是最新版本,但是其中没有elinks,不过后来去安装过程中的setup.ini中找到了一个links:
@ links
sdesc: "Text mode WWW browser"ldesc: "A lynx-like character mode browser. It includes support for
rendering tables and frames, features background downloads, can
display colors and has many other features. nlike lynx, links supports
the HTML TABLE tag. Links also allows you to download files in the
background."
category: Web
requires: libbz2_1 libgcc1 libopenssl098 zlib0 cygwin
version: 2.5-1
install: release/links/links-2.5-1.tar.bz2 477703 64888471ab366a297bad8e94d228a6bf
source: release/links/links-2.5-1-src.tar.bz2 3941642 8074a321ab60f00f23937ee7c5cf605e
所以去试试links:
links -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR.txt
是可以生成txt,但是中文都是星号,即输出编码不对。
又试了试:
links -force-html -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_forceHtml.txt
结果也还是中文是星号。
然后又试了多个其他的codepage,包括utf-8的,结果都是不行:
CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage windows-1250 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_1250.txt CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage windows-1252 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_1252.txt CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage utf8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_utf8.txt Error parsing option -codepage: UTF-8 can't be here CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage utf-8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_utf8.txt Error parsing option -codepage: UTF-8 can't be here CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage UTF-8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_utf8.txt Error parsing option -codepage: UTF-8 can't be here CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage 65001 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_65001.txt Error parsing option -codepage: Unknown codepage CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage 936 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_936.txt Error parsing option -codepage: Unknown codepage CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src $ links -codepage windows-936 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR_936.txt Error parsing option -codepage: Unknown codepage
所以,没法方便的指定对应的charset的,所以算了,不折腾了。
(4)elinks
上面说到,通过:
./configure
去配置,终于配置好了,然后继续:
make
去编译,编译过程,除了一些warning,其他还算顺利。
编译完之后,再去安装:
make install
然后就可以使用elinks了。
然后再去用:
elinks -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/elinks/MPEG_VBR.txt
生成txt,效果也不错:
头部的revhistory的内容的效果,也是支持表格的:
普通表格的效果:
带嵌套的表格的效果,也不错,但是输出内容太宽了:
【总结】
想要从docbook中输出plain text,是没有很直接的,方便的XSL stylesheet可以用的。
但是可以用间接的方法实现此功能,即先用docbook输出HTML,然后再用一些其他工具生成plain text。
目前已尝试的方法包括:
1.用浏览器的导出功能
比如用IE9打开HTML,然后可以另存为txt格式,以此实现导出HTML为txt。
优点:不需要额外安装工具,使用方便
缺点:导出的txt,格式不好,尤其是对表格等的支持,很差。
2.用基本文本的浏览器(text-based webbrowser)导出HTML为txt
(1)lynx
命令:
lynx.exe -display_charset=UTF8 -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/lynx/MPEG_VBR_displayUtf8.txt
优点:
A。Cygwin最新版本,已包含此工具,无需额外下载安装。
B。对普通表格支持不错,导出效果很好。
缺点:
A。对revhistory部分支持不好,没有生成带表格的效果
B。对嵌套的表格,支持不好
(2)w3m
命令:
w3m -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/w3m/MPEG_VBR.txt
优点:
A。对revhistory部分支持很好,导出效果带表格
B。对普通表格支持很好
C。对嵌套的表格支持也很好
D。输出内容的宽度控制的也很好,没有超过右边边界(默认宽度为80)
(3)links
需要说明的是,用下面命令:
links -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/links/MPEG_VBR.txt
所生成的txt,不支持非英文字符。中文会被星号代替。
暂时没找到有效办法可以输出正常的支持中文的txt。所以,此工具只适用于纯英文的HTML。
由于其更新换代版本的elinks更好用,所以普通人可以直接忽略此工具即可。
此处只所以还提及,主要是由于Cygwin自带此工具,所以才试用了此工具,才在此处做简单介绍的。
(4)elinks
命令:
elinks -dump ../output/html/single/MPEG_VBR.html > ../output/plain_text/elinks/MPEG_VBR.txt
优点:
A。对revhistory部分支持很好,导出效果带表格
B。对普通表格支持很好
C。对嵌套的表格支持也不错
缺点:
A。输出内容的宽度控制的不是很好,会远远超过默认的右边边界(默认宽度为80)
【最终结论】
通过比较了ie9的导出为tx的t功能,与lynx,w3m,links,elinks等工具,最后得出的结论是:
想要实现将docbook输出为plain text的话,效果最好的方式是:
1. 用docbook生成(单个)HTML文件
2.用(基于文本的浏览器工具)w3m将HTML文件导出为txt文件
用法为:
w3m -dump xxx.html > xxx.txt |
其导出的txt,对各种文字和表格(甚至嵌套的表格)支持的都很好。
【提示】
如果输入的(带中文的)HTML(和输出的txt)的charset没有正确指定,可能需要在使用w3m等工具时候,传入合适的charset相关的参数,否则输出的txt可能会是乱码。
转载请注明:在路上 » 【已解决】用Docbook生成纯文本格式