金山文档在线预览编辑服务

金山WPS在线预览是金山WPS针对政企单位提供的软件服务组件,可同时供多个业务系统进行对接和集成,协助业务系统实现对office、pdf和图片等格式文档的在线预览。
了解咨询

雷达评级

A

用户规模

-

产品上线

-

商品参数

交付方式
人工交付
交付时长
10天

商品介绍

商品亮点
  • 文件格式转换:金山WPS在线预览可同时供多个业务系统进行对接和集成,协助业务系统实现对office、pdf和图片等30多种格式文档的在线预览。
  • 文件无损预览:WPS PC客户端打开这个文档什么样,用浏览器做在线预览的时候就是什么样子。支持版式文档:PDF、OFD、图片、Visio、…
  • 文档智能处理:具备丰富的后台对接接口,能转成PDF、书签接口、水印接口、安全能力。
商品规格说明:

并发文档30,30M最大单文档上限   价格: 2800元/年

并发文档50,50M最大单文档上限   价格: 9000元/年

商品说明
版本: V1.0交付方式: License
适用于: Android/Linux/iOS上架日期: 2020-11-10
目前,支持doc(x)/xls(x)/ppt(x)/pdf等多种常用格式转为H5形式进行预览,实现快速查看文档内容,预览过程不依赖于本地Office。在PC预览的基础上,转换出的H5页面也可以很好的兼容移动端,在移动设备上经过特别优化,支持适应屏幕大小,实现高保真预览效果。

金山WPS在线预览是由一组后台服务组成,并提供接口供业务系统进行对接。需要客户单位提供独立的(虚拟或物理)服务器进行部署,并按照如下说明实现相关接口。

支持格式
文件预览支持格式
演示 pptx, ppt, pot, potx, pps, ppsx, dps, dpt, pptm, potm, ppsm
表格 xls, xlt, et, ett, xlsx, xltx, csv, xlsb, xlsm, xltm
文字 doc, dot, wps, wpt, docx, dotx, docm, dotm
安全文档 wpss, dpss, ets
便携文档 pdf
开发 lrc, c, cpp, h, asm, s, java, asp, bat, bas, prg, cmd
其他 rtf, txt, log, xml, htm, html
图片 jpeg, jpg, png, gif, bmp, tif
压缩文件 Zip, 7z, rar (暂时不支持加密压缩包)
模块组成

图1 模块组成关系图

集成预览服务组成:预览组件、WPS组件、业务端对接模块。

预览组件(XView):预览服务的组成部分,负责接收前端用户预览请求。

WPS组件(Yun-wps):预览服务的组成部分,负责将业务系统提供的文档转换成对应的预览文件体。

对接模块:整个预览流程的关键环节,由业务系统负责实现相应接口,比如:v1/3rd/fileinfo等接口。

预览流程
预览流程
图2 预览转换流程图

场景开发实例
实时预览场景
适用于业务系统(比如:OA),文档通过WPS Office起草完成后,流转过程中需要领导在移动端审批或浏览文档内容时使用。

文档信息接口
业务系统服务端需要实现/v1/3rd/fileinfo接口,详细请参考 业务实现接口

fileinfo示例如下: 示例下载

package demo;

import java.io.*;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.apache.commons.codec.digest.DigestUtils;

@RestController
public class FileInfoController {

    @RequestMapping("/v1/3rd/fileinfo")
    public FileInfo getFileInfo(@RequestParam String fileName) {
        FileInfo result = new FileInfo();
        result.setFname(fileName);
        result.setUrl("C:\\files\\" + fileName);

        try {
            result.setUniqueId(DigestUtils.sha1Hex(new FileInputStream(result.getUrl())));
        } catch (IOException ex) {
            throw new InvalidFileException(fileName);
        }

        result.setGetFileWay(GetFileWay.LocalFile);
        result.setEnableCopy(true);
        result.setWatermarkType(WatermarkType.Text);
        result.setWatermark("Kingsoft WPS");
        System.out.println(result);
        return result;
    }

    @ExceptionHandler(InvalidFileException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public GetFileInfoError procErr3rdInvalidFileException(InvalidFileException e) {
        return new GetFileInfoError(ErrorCode.InvalidFile, "", e.getFileName() + " 文件不存在");
    }
}
前端请求预览
业务系统前端需要调用http://预览服务地址/v1/view?任意参数

任意参数:业务系统能识别的文件信息

HTML请求示例如下:

:/v1/view/preview?fileName=1.doc">1.doc 
文档预转场景
适用于业务系统(比如:档案管理系统),通常业务部门有大量的文档需要查阅时,为了节省预览转换的时间,可以提前对文档进行预转缓存,需要使用时可快速查看文档内容。

文档信息接口
业务系统服务端需要实现/v1/3rd/fileinfo接口,详细请参考 基础运行环境

fileinfo示例如下: 示例下载

package demo;

import java.io.*;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.apache.commons.codec.digest.DigestUtils;

@RestController
public class FileInfoController {

    @RequestMapping("/v1/3rd/fileinfo")
    public FileInfo getFileInfo(@RequestParam String fileName) {
        FileInfo result = new FileInfo();
        result.setFname(fileName);
        result.setUrl("C:\\files\\" + fileName);

        try {
            result.setUniqueId(DigestUtils.sha1Hex(new FileInputStream(result.getUrl())));
        } catch (IOException ex) {
            throw new InvalidFileException(fileName);
        }

        result.setGetFileWay(GetFileWay.LocalFile);
        result.setEnableCopy(true);
        result.setWatermarkType(WatermarkType.Text);
        result.setWatermark("Kingsoft WPS");
        System.out.println(result);
        return result;
    }

    @ExceptionHandler(InvalidFileException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public GetFileInfoError procErr3rdInvalidFileException(InvalidFileException e) {
        return new GetFileInfoError(ErrorCode.InvalidFile, "", e.getFileName() + " 文件不存在");
    }
}
JAVA请求示例如下:

package demo;

import java.io.*;
import org.springframework.web.bind.annotation.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import com.fasterxml.jackson.databind.*;

@RestController
public class ConversionController {

    @RequestMapping("/conversion")
    public ConversionResult conversion(@RequestParam String fileName) throws Exception {
        ConversionResult result = null;
        CloseableHttpClient httpclient = HttpClients.createDefault();

        try {
            // 请求在线预览服务的接口/v1/view,传入要预览的文件名(这里文件名作文件唯一编号)
            HttpGet httpGet = new HttpGet("http://192.168.40.139:8237/v1/view?fileName=" + fileName);
            System.out.println("Executing request " + httpGet.getRequestLine());

            // 处理在线预览服务的响应信息
            ResponseHandler resp new ResponseHandler() {
                @Override
                public ConversionResult handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {
                    int status = response.getStatusLine().getStatusCode();
                    if (status >= 200 && status < 300) {
                        ObjectMapper mapper = new ObjectMapper();
                        // 将响应的Json数据,转换成实体类
                        return mapper.readValue(response.ge