灰狼的雕虫小技

灰狼和小红帽的现代版

Home Contact Syndicate this Site (RSS 2.0) Syndicate this Site (Atom) Login
  139 Posts :: 0 Stories :: 63 Comments :: 0 Trackbacks

文章 分类

存档

日记 分类

C/C++

Databases

Java

JavaScripts

Linux

友情连接


鹏图 20050625初稿
首发http://OOo.yjrg.net/


  几乎所有介绍OOo优点的文章里,都会提到一点:OOo的文档格式是开放的。可是,到底怎么个开放法?这种开放又能带来什么好处?这种好处又是否足够支持人们放弃以前的封闭文档格式呢?笔者在网上其他文章的启发下,逐步认识到OOo文档的优秀之处。大家不妨一同来看看,蛋蛋蛋的外壳下面到底藏着什么好东西。时间所限,还有本人实验未能完成的地方,欢迎指正。

  Ooo的writer程序是一个和微软word功能相当的字处理软件,也是最为广泛使用的OOo组件,它的默认文档格式为*.sxw(1.1.3版本)。我们就拿一个sxw文档来做实验。

  首先创建或寻找一个sxw文档,然后咱们动手,把文档的后缀名由*.sxw改为*.zip,不要理会windows的警告(linux下会警告吗?)。接下来,用你电脑上安装的任何可以解开zip文档的软件解开它!winzip或winrar,或者就是windowsXP本身的资源管理器,马上就可以轻而易举地打开这个我们‘伪造’的压缩文档!

  test.sxw
    \META-INF
      manifest.xml
    \Pictures
      100000000000009600000032EF25942D.gif
    \content.xml
    \meta.xml
    \mimetype
    \settings.xml
    \styles.xml

  呵呵,不用吃惊,任何OOo文档格式都是一个‘伪装的zip’文档。这带来第1个显而易见的好处——OOo文档比同样内容的MSoffice文档小得多。不信你试试。zip格式的压缩算法是免费公开的,所以才有这么多的软件可以打开。这样,就算是10年、20年后,我也不用担心无法剥开OOo的蛋壳。



  好,既然咱们钻进了OOo的肚子,就不妨仔细打量打量,看看这OOo文档的内部都是些什么东东。……(此处略去n字的实验过程,大家自己动手,别偷懒)……我将目前发现的结果汇总为一张示意图:

  Ooo文档: zip文件。公开算法,winXP内置支持。
   |
   |……文本: xml文件。文本文件,只要记事本就能打开。
   |……格式: xml文件。
   |……图形: gif文件,
        jpg文件,
        png文件。三种文件都被web支持,只要浏览器就可以显示。

  显然,OOo肚子里面的文件基本上都是公开格式。但鹏图似乎记得,生成jpg需要付费,jpg不是公开格式。那么,OOo一定不能自己生成jpg,对吗?实验:在文档中插入一个jpg,保存,把这个‘伪装的zip’文档剥壳,我们在内含的文件夹中看到jpg图形。而一旦我们在OOo中对这个jpg进行更改,比如剪裁、调整亮度,重新保存后,我们发现,原来OOo文档中内藏的jpg文件不见了,取而代之的是png文档,一个公开格式的文档。同样,我们也可以发现,gif在OOo中被修改后,也将保存为公开格式:png文档。bmp文件会怎样,我还没来得及实验,您不妨试一试。

  这样,我们总结出一个规律,OOo只在未对插入的图像文件做修改时,保留原图形的原本格式。那么,要想尽量减少文档体积,那么,就要避免在OOo内部修改图像,而尽量插入已经修改好的图像文件。事实上,类似的故事也发生在微软的word文档中。

  我发现的这第2个好处,便是和word比较而来——OOo可以很方便的萃取所有内含图像。它们都整整齐齐地呆在‘伪装zip’的Pictures文件夹里面,而至于word,鹏图还没有听说过有什么方法可以一股脑地搬出所有图像。



  回到我们最重要的‘文本’吧,在大多数情况下,writer的文档最重要的部分,仍然是文本内容。显然,当我们看到content.xml文件时,自然猜测到,它就是保存文本的地方。没错,把它用记事本打开,我们在一堆xml代码中,就可以翻到文档中的文字部分。这带来OOo的另一个好处——便于萃取文本。

  在正常情况下,这根本算不上优点,因为任何一款字处理软件都有把文档转换为纯文本的能力。但是,在特殊情况下,你的文档损坏了呢?当你的word打不开word档,你不光所有的排版前功尽弃,而且,你连文档里面说什么都不知道了。这个时候,OOo的zip文档特性,也许使我们有机会抢出至关重要的content.xml,那么,文字得救了。



  也许,我们可以继续猜测styles.xml是保存所有样式的文件,setting.xml是保存所有设置的文件……凡此种种,均可以通过实验慢慢揭开。在实验过程中,鹏图发现了一个消失的图形。

  在OOo的绘图文档*.swd当中,鹏图没有发现自己画的一个圆形和一个矩形。我以为它们会以两个png文件的身份呆在Pictures目录里面呢。难道这两个矢量图形(注意,不是图像)会以文本的形式藏身于某个xml文件当中么?那又是什么图形文件格式?难道是最生猛的SVG?

  按下不表,我们继续探查OOo文档的其他优势。在我们上面把OOo的蛋壳逐一剥离,你会不会有另一方面的担心:如果我是私密性的文档,岂不等于裸奔了?别担心,开放的文档格式,并不等于不设防。

  Ooo既然采用zip格式做整体包装,那么它自然支持zip的加密方式。在文档保存时,只要在‘使用密码存盘’的前面打上钩,你就得到了一个加密的‘伪装zip’文档。

  zip的压缩算法是公开的,它的加密算法也是公开的。是不是公开的加密算法就不保险呢?不是,千万不要有这个偏见,恰恰相反,算法公开,是加密领域中一个较好的策略。打个比方:一个好的保险箱,明白的告诉你锁头在哪里,你也撬不开,那才是真正的保险。而那种靠隐藏锁头位置来防范的保险箱,一旦被人发现秘密,就会被轻易解除。算法是人设计的,如果靠算法保密来加密文档,那么,到底谁才是可信赖的人呢?把一个重要文档的安全性寄托在某个算法发明人身上,至少比掌握在自己手上更不安全。不知道word的加密算法有谁知道?如果没有,那么本文发现的OOo最后一个好处就是——加密的安全性。



  Ooo的好处肯定不只鹏图发现的这些,随着对使用的深入,OOo应该会有更多的优势呈现。为什么鹏图如此肯定?虽然OOo文档本身的格式是不可更改的(有官方声明),但是OOo程序是开源软件,我们今天发现的缺点,也许明天就得到解决。除去OpenOffice.org社区本身,光是中国大陆,就有四家以OOo为基础的商业软件在日益进步,OOo软件赋予OOo文档的二次优势将源源不断!



鹏图 20050625初稿
首发http://OOo.yjrg.net/

《剥开蛋壳瞧究竟:OOo文档到底好在哪?》
——OpenOffice.org文档格式揭密
posted on Wednesday, June 29, 2005 1:45 PM #linux 相关

Feedback

No comments posted yet.

Post Feedback

Title:
Name:
Url:
Comments: 
Protected by Clearscreen.SharpHIPEnter the code you see: