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

ibachue · December 15, 2012 · Last by dotnil replied at February 07, 2013 · 10811 hits

最近在思考如何在网页上实现对 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 就可以做到了 在此也推荐给大家了 呵呵

感谢告之

You need to Sign in before reply, if you don't have an account, please Sign up first.