最近在思考如何在网页上实现对 MS Office 文件(基本上就是那三个了)的预览功能。因为确实有不少网站都提供了这一功能,但是质量天差地远。有些做的挺好,基本上可以称为是在预览,另外一些的效果就不说了。 我自己Google了下,猜想可能比较靠谱的就是用C#去调用Office的接口,然后把文件转换成可以在Web上显示的格式,比如图片或是其他开源格式。 大家以前有没有做过类似的功能呢?或是做过这方面的探索呢?Share 下吧,谢谢!
带 x 的就是 xml 了 Excel 只是基本表格应该没问题 PowerPoint,全绝对定位,只有基本的元素应该也没问题 Word,这个就不知道了
不带 x 的,真不知道了
或许正确的方式应该使用 office 自带功能转换成 html?
#5 楼 @iBachue https://github.com/hooopo/convert_office
好像要装 openoffice 库。然后如果中文乱码要在系统安装中文字体。
Speaker Deck 是只支持上传 pdf,不存在字体问题。然后转成图片? https://speakerd.s3.amazonaws.com/presentations/5112451026bf013092b722000a1d8877/slide_14.jpg
speakerdeck 只是 pdf 转图片;用户自己把 ppt 转 pdf,而且这里估计 pdf 必须是嵌入字体的;其实要预览这些文件,最快的方式是传到 Google Doc 或者 Office.com。
单纯用自己的代码来解也是可以的。当初写 Java 的时候,可以用 Apache POI 库来操作这仨文件,曾经用它来生成 xls。Ruby 的话,不知道有没有现成的,不行就只能 JRuby 了。
#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/