在线预览office文档,这种方法不仅免费而且效果最好

1,894 阅读5分钟

微软 Office Online Server 2016 服务安装部署

更多精彩内容请关注公众号:闲人张

前言

项目需要实现在线文档预览功能,网上开源支持不友好,对比了几家收费的最后发现了微软的office web apps和office online serve可满足需求,而且经过测试对office文档支持友好,通过view.officeapps.live.com/op/view.asp… 的方式即可实现。 项目需要私有化部署,所以需要手动搭建服务。网上查阅资料发现搭建过程坑比较多,这里记录下自己的搭建过程及遇到的问题,整个过程参考官网

这里记录下几家收费的,方便日后需要:

准备工作

  • 准备两台干净的服务器

一定是两台。一台作为域控制器,一台作为转换服务。 若放在一台上可能会出现只能预览excel无法预览word,ppt的情况 为什么需要域,官方要求所有服务必须是域的一部分 服务器要求必须是 Windows Server 2012 R2 或 Windows Server 2016

这里我在阿里云购买了两台ECS,Windows Server 2012 R2 64位

  • 转换服务上下载office online server 2016 的中文安装包和语言包
ed2k://|file|cn_office_online_server_may_2016_x64_dvd_8480704.iso|709687296|99014E02579B6E08E7172D05857F2D05|/
ed2k://|file|cn_office_online_server_language_pack_may_2016_x64_8783021.exe|122025248|3E8073A25EE45E0C106E34FA86CB006B|/
  • 转换服务上下载所需软件

.NET Framework 4.5.2 Visual C++ Redistributable Packages for Visual Studio 2013 Visual C++ Redistributable for Visual Studio 2015 Microsoft.IdentityModel.Extention.dll

安装时按此顺序安装

域服务安装

参考这篇博客,博客内容较为详细,这里就不图文并茂了!

安装域

graph LR
    打开服务器管理器 --> 添加角色和功能 --> 下一步... --> 服务器角色 --> 选择ActiveDirectory域服务 --> 添加功能 --> 下一步 --> 完成安装 

配置域

graph LR
   打开服务器管理器 --> 选择ADDS --> 点击黄色提示更多 --> 将此服务器升级为域控制器 --> 添加新林 --> 输入域 --> 下一步 --> 填写密码 --> 下一步... --> 点击安装  

将转换服务器加入到域控服务器

此操作在转换服务器中

graph LR
   控制面板 --> 网络和Internet --> 网络连接 --> TCP/IPv4 --> 使用下面的DNS --> 首先DNS输入域的IP --> 完成

此操作在转换服务器中

graph LR
   控制面板 --> 系统和安全 --> 系统 --> 更改设置 --> 修改计算机名称 --> 隶属于域填入配置域时添加新林所设置的域 --> 完成

此操作在域服务器中

graph LR
   打开服务器管理器 --> 管理 --> 添加服务器 --> 输入转换服务器的名称 --> 立即查找 --> 将搜索到的服务器双击添加到右边 --> 点击确定

在域控服务器中,所有服务器显示两台服务器,并都是联机状态则表示成功

转换服务安装

安装

  • 以管理员身份打开powershell安装系统角色输入命令:
Install-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Static-Content,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Includes,InkandHandwritingServices,Windows-Identity-Foundation,Server-Media-Foundation

完成后重启

  • 依次安装下载的所需软件
  • 安装office online及语言包

启动

  • 以管理员身份打开powershell启动服务场:
Import-Module OfficeWebApps
  • 部署服务器场:
New-OfficeWebAppsFarm -InternalURL “http://xx.domin.com” -ExternalUrl “http://ip” -AllowHttp –EditingEnabled

InternalURL: 是运行 Office Online Server 服务器完全限定的域名 (FQDN),如 servername.contoso.com。 ExternalURL: 是可以在 Internet 上访问的 FQDN。 EditingEnabled: 为可选,它在 Office Online 中启用编辑 AllowHttp: 配置要使用 HTTP 的场。

若出错:office online 服务未能启动

image.png 虚拟机安装需要手动创建注册表 regedit.exe -> HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/EventLog/Microsoft Office Web Apps再次部署服务器场执行命令

出现如下提示即部署成功

image.png

浏览器 输入:http://ip/hosting/discovery 得到以下的结果就代表成功了

image.png http://ip/hosting/discovery 能登录,http://ip/op/generate.aspx显示“服务器错误” 输入 Set-OfficeWebAppsFarm -OpenFromUrlEnabled:$true 即可访问成功

其他配置

office online server 对大文件会有限制,所以需要配置才能进行访问 修改下面两个目录下的Settings_Service.ini,添加: C:\Program Files\Microsoft Office Web Apps\OpenFromUrlHost C:\Program Files\Microsoft Office Web Apps\OpenFromUrlWeb

 OpenFromUrlMaxFileSizeInKBytes=(System.Int32)512000

配置完成后使用CMD命令,输入services.msc打开服务,重启office online服务

浏览在线文档 http://xx.domin.com/op/view.aspx?src=https://xxx.com/resources/xxx.docx
浏览域所在服务文档 http://xx.domin.com/wv/wordviewerframe.aspx?WOPIsrc=http://文件服务ip:端口/wopi/files/xxx.docx

若访问异常 检查防火墙是否关闭 若修改样式,如去掉下载 分别修改 C:\Program Files\Microsoft Office Web Apps\WebWordViewer\Resources\2052\wordviewer.css C:\Program Files\Microsoft Office Web Apps\ExcelServicesWfe_layouts\App_Scripts\Ewa.cuixas.js C:\Program Files\Microsoft Office Web Apps\WebPPTViewer\pptresources\2052\stylesRead.css 将cui-herobar-toolbarContainer display 设置为 none 项目需要隐藏掉文件的src,可用nginx,网关,OpenResty等。这里通过接口代理+url加密解密的方式处理

 @GetMapping("/officeView")
    public void officeView(HttpServletResponse response, String targetUrl) throws IOException {
        //url 处理 。。。
        String finalUrl = targetUrl;
        URL url = new URL(finalUrl);
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
        String line;
        PrintWriter out = response.getWriter();
        while ((line = in.readLine()) != null) {
            out.println(line);
        }
        out.flush();
        in.close();
    }

其他配置可参考这里

编辑功能实现

文件编辑只可编辑文件服务器上的文件,须部署相应jar包。仅支持docx,xlsx,pptx格式编辑 浏览域所在服务文档 xx.domin.com/wv/wordview… 时可启用编辑功能

image.png

若需要相关安装文件及jar包,请关注公众号:闲人张 获取