瞎扯淡 如何在网页上实现对.doc (x),.xls (x),.ppt (x) 格式文件的浏览

ibachue · 2012年12月15日 · 最后由 dotnil 回复于 2013年02月07日 · 10811 次阅读

最近在思考如何在网页上实现对 MS Office 文件(基本上就是那三个了)的预览功能。因为确实有不少网站都提供了这一功能,但是质量天差地远。有些做的挺好,基本上可以称为是在预览,另外一些的效果就不说了。 我自己Google了下,猜想可能比较靠谱的就是用C#去调用Office的接口,然后把文件转换成可以在Web上显示的格式,比如图片或是其他开源格式。 大家以前有没有做过类似的功能呢?或是做过这方面的探索呢?Share 下吧,谢谢!

用 openofice 转换成 pdf

#1 楼 @hooopo pdf 也不能在浏览器上直接显示吧。另外 openoffice 效果是否靠谱呢?

错了 是转成 flash 纯文本或带图片的效果还可以。

带 x 的就是 xml 了 Excel 只是基本表格应该没问题 PowerPoint,全绝对定位,只有基本的元素应该也没问题 Word,这个就不知道了

不带 x 的,真不知道了

或许正确的方式应该使用 office 自带功能转换成 html?

#3 楼 @hooopo 那怎么转呢?Adobe 有相关库?

#3 楼 @hooopo 额,头像上眼镜啦

#6 楼 @huacnlee 被你发现了...

#5 楼 @iBachue https://github.com/hooopo/convert_office

好像要装 openoffice 库。然后如果中文乱码要在系统安装中文字体。

#7 楼 @hooopo Well,谢谢推荐

#7 楼 @hooopo 字体搞不到咋办?

#9 楼 @bhuztez 这个还真不清楚~

#7 楼 @hooopo 那挺麻烦的,既然是网站,几乎所有语言都有可能了。

#9 楼 @bhuztez 把各种微软字体往服务器里导吧

#11 楼 @iBachue 还可以参考 slideshare 和 speker deck 的做法。他们应该会处理各种格式的文件。不过好像没公布方法

#13 楼 @hooopo 任何相关信息都找不到啊,咋参考?

#13 楼 @hooopo 这个是人家核心技术吧,不开源呢

#12 楼 @iBachue 不是所有微软字体都能随便这么用的吧

#14 楼 @bhuztez #15 楼 @iBachue 是啊 我要是知道就不废话了......

Speaker Deck 是只支持上传 pdf,不存在字体问题。然后转成图片? https://speakerd.s3.amazonaws.com/presentations/5112451026bf013092b722000a1d8877/slide_14.jpg

#13 楼 @hooopo slideshare 出来的都是 flash,应该是 ppt -> flash 的技术吧。

#18 楼 @hooopo 话说 Speaker Deck 预览还不如 SlideShare,我都直接下 PDF 的...

#21 楼 @iBachue 我觉得是,Speaker Deck 只允许上传 pdf,出来到是多张图片。应该就是 pdf -> image 了

#21 楼 @iBachue word to pdf 的这个过程好像用户可以自己转,office 自带导出 pdf 功能吧?好久没用过了。。不清楚~

#24 楼 @hooopo 我记得 2010 以后都有这功能了

speakerdeck 只是 pdf 转图片;用户自己把 ppt 转 pdf,而且这里估计 pdf 必须是嵌入字体的;其实要预览这些文件,最快的方式是传到 Google Doc 或者 Office.com。

单纯用自己的代码来解也是可以的。当初写 Java 的时候,可以用 Apache POI 库来操作这仨文件,曾经用它来生成 xls。Ruby 的话,不知道有没有现成的,不行就只能 JRuby 了。

#26 楼 @dotnil 自己做网站,总不能引用 Google 的东西吧。是不是 Ruby 不要紧,可以后台跑 shell 去运行 Java 程序嘛 这个都 OK 的

#26 楼 @dotnil 不过不知道 Apache POI 这库转换效果如何啊,他是调用了 OpenOffice 的库吗?还是自己破解了 MS Office 库的格式啊

#28 楼 @iBachue 不是 OpenOffice,是直接支持文件格式的,word 和 ppt 没试过,xls 的还行,而且是三年前的经历了,现在这个项目应该更完善了才对,并且,在这段时间里,Office 的文件格式也日渐开放了

#29 楼 @dotnil 好吧 去试试,希望还没忘记 Java

这个看上去很强大的样子... http://coolwanglu.github.com/pdf2htmlEX/

#31 楼 @bhuztez 好多这种转换的项目都是中国人搞得。。

#34 楼 @bhuztez 找到 speaker deck 用的那个 gem 了:https://github.com/jonmagic/grim 可以从 pdf 获取文字和抽取成图片。

#36 楼 @hooopo 这个绕了好大一圈,还不如 pdf2svg,直接从 poppler 画到 cairo 的 SVG 或者 PNG 之类的 Surface 上

要不是 pypoppler 莫名其妙需要依赖gtk.gdk,一个 python 脚本就搞定了

#!/usr/bin/env python2

import sys
import os.path

import poppler
import cairo


def convert_to_svg(page, filename):
    w,h = page.get_size()
    surface = cairo.SVGSurface(filename, w, h)
    ctx = cairo.Context(surface)
    page.render(ctx)


if __name__ == '__main__':
    filename = sys.argv[1]

    doc = poppler.document_new_from_file('file://'+os.path.abspath(filename), None)
    page_nums = map(int, sys.argv[2:]) or range(doc.get_n_pages())

    for pn in page_nums:
        page = doc.get_page(pn)
        convert_to_svg(page, filename+'.%d.svg'%pn)

如果打算先转成 pdf 格式,再转到图片 在 linux 下,ImageMagick 是最好的选择,像 pcmanfm 这样的桌面文件软件都是调用它来生成缩略图 convert abc.pdf abc.jpg http://harikrish.wordpress.com/2011/04/07/ubuntu-linux-command-line-tool-to-convert-pdf-to-image-and-from-image-to-pdf/ http://blog.prashanthellina.com/2008/02/03/create-pdf-thumbnails-using-imagemagick-on-linux/

google 对 word 的预览好像是用的图片,这个样效果应该还行,但是遇到 xls,就完全不行了。

原来这么麻烦啊- -。没有专门的 gem 来实现这个功能吗?

@iBachue @hooopo 开项目吧,poor man's MS Office converter ...

#43 楼 @bhuztez 这个东西自己用不到啊

@hooopo @bhuztez @huacnlee @dotnil 后来我们公司选了另一个商业产品 Crocodoc Dropbox 也用这个做预览的 那些格式与 HTML5 的转换全部都相当完美 还带很多额外功能 API 相当简单 从上传到预览两个 curl 就可以做到了 在此也推荐给大家了 呵呵

感谢告之

需要 登录 后方可回复, 如果你还没有账号请 注册新账号