基于unoconv的在线office预览

方案选择

这几天在搞在线文档预览,网上查了几种方案,

  • 第一种:使用google的在线预览 -> 国内被Q,pass

  • 第二种:使用第三方的,比如:永中dcs -> 要钱,pass

  • 第三种:先转换为pdf,在使用pdf在线预览插件预览 -> 对服务器负担比较大。

  • 第四种:自己写解析库 -> 我这实力,开玩笑呢?

查了查,也就第三种可行。不过我之前都是做的简单的web开发,想到文档转换对于cpu的消耗比较大,应该无法适应大规模的并发情形。也在segmentfault上提了一个问题:php长时间的服务的设计与和前端的交互,不过并没有得到很好的解决。

后来我问了一个同学,他之前用的unoconv把office文件转为pdf,然后通过站内信的方式提醒用户文档转换完成。中间用了php-resque这个轻量级消息队列。

和平时的php开发不同,除了cgi服务器以外,还要有个Worker,专门用来处理文档转换。

大概流程就是:php处理前端上传来的文件后,把转化文件的任务添加到redis里,然后不断的判断转换是否完成,转换完成后把pdf的路径传给前端,前端跳转过去。
流程

实现

见:https://github.com/nladuo/online_office_viewer

效果

安装

sudo apt-get install unoconv redis-server php5-redis
git clone https://github.com/nladuo/online_office_viewer.git
cd online_office_viewer && composer install

启动redis

redis-server

start-redis

启动Worker

cd online_office_viewer/cli
bash ./start_worker.sh

start-worker

启动CGI服务器

cd online_office_viewer
php -S 0.0.0.0:8888

start-cgi

测试转换

选择一个文档

open-browser

等待上传

uploading

查看Worker的日志

worker-log

转换成功后

finished

如果转换出现了乱码,是因为linux系统上没有windows的字体,需要把字体文件拷贝到服务器上。具体可以百度unoconv中文乱码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值