Java实现Office文件预览

createh52周前 (03-03)技术教程11

一、核心技术栈:使用开源技术ONLYOFFICE办公套件,官网地址:【ONLYOFFICE API 文档 - 基本概念

二、环境搭建:

本篇使用docker为例进行ONLYOFFICE环境部署,docker安装可自行学习,本文不做介绍

1、拉取镜像

执行以下命令,可自定义拉取的版本,本文使用7.5.1.23版本,默认拉取当前最新镜像

docker pull onlyoffice/documentserver 

2、创建容器

执行以下命令

docker run -i -t -d -p 8013:80 --name documentserver --restart=always -e JWT_ENABLED=false -v /data/onlyoffice/DocumentServer/logs:/var/log/onlyoffice -v /data/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -v /data/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice -v /data/onlyoffice/DocumentServer/db:/var/lib/postgresql onlyoffice/documentserver

3、启动演示项目

sudo docker exec 容器id sudo supervisorctl start ds:example

浏览器访问容器8013端口 http://127.0.0.1:8013 即可看到项目演示用首页,如下图:


4、配置域名

https域名代理onlyoffice时需要在location里加如下配置

proxy_redirect http:// $scheme://;
proxy_set_header X-Forwarded-Proto $scheme;

否则会提示

This request has been blocked; the content must be served over HTTPS.

5、可能会遇到的问题

  • Onlyoffice显示文档安全令牌的格式不正确,解决方法,在重启创建命令加上以下参数
-e JWT_ENABLED=false -e USE_UNAUTHORIZED_STORAGE=true -e ONLYOFFICE_HTTPS_HSTS_ENABLED=false
  • Onlyoffice下载文件失败问题

查看日志:docker中对应位置
/var/log/onlyoffice/logs/documentserver/converter/out.log,创建容器的时候,已经将此目录挂在到宿主机
/data/onlyoffice/DocumentServer/logs,发现出现以下错误

Error: DNS lookup xxx.xxx.xxx.xx(family:undefined, host:undefined) is not allowed. Because, It is private IP address.

解决方法:编辑Onlyoffice配置文件允许私有IP通过,docker中配置文件路径
/etc/onlyoffice/documentserver/default.json,修改以下参数

"request-filtering-agent" : {
        "allowPrivateIPAddress": true,
        "allowMetaIPAddress": true
},

也可以在宿主机上将文件复制出来进行编辑,然后再上传至容器

docker cp onlyoffice:/etc/onlyoffice/documentserver/default.json ./
vim default.json
docker cp ./default.json onlyoffice:/etc/onlyoffice/documentserver/default.json

不管用哪一种方式,修改了容器参数,需要重启容器,才能生效;至此ONLYOFFICE环境已经搭建完成

6、JAVA使用ONLYOFFICE预览office文件

JAVA开发一个Controller控制器,请求视图指向目标页面,html编码示例如下





    
    ${title}预览
    
    



预览效果如下




7、注意事项

  • 在配置onlyoffice反向代理时,要用upstream,并且upstream的名字要和server块中的server_name名字保持一致
  • 预览乱码的问题,一般都是缺少字体
  • PDF和图片预览一般建议使用pdf.js

自己使用过程的经验仅供参考,希望可以帮助到大家,谢谢

相关文章

初识Java—(二) Java的运行机制

1.2 Java程序运行机制Java语言是一种特殊的高级语言,它既具有解释型语言的特性,也具有编译型语言的特征,因为Java程序要经过先编译,后解释两个步骤。计算机高级语言按程序的执行方式可以分为编译...