首页  /  预约专享  /  springboot 整合eWebOffice

springboot 整合eWebOffice

预约专享 3151

这里我用的是官方给的数据库,即编辑页面,是一个简单的demo,没有签章等功能,这个控件是需要购买的,不购买的话有试用版,但虽然可以用,但保存会有有使用字样的图片,而且外面的框上也会有使用字样。

网上没有相关使用资料及介绍,能找到的只有demo和API文档,所以写下这篇,给后面的人提供个思路。

1、将下载的试用版控件解压,

2、把jar包添加到本地仓库,方便后面我们用pom的方式

代码语言:javascript复制mvn install:install-file -DgroupId=com.sunnada.gaia -DartifactId=eWebOffice -Dversion=0.1 -Dpackaging=jar -Dfile=E:/eWebOfficeServer.jar3、把它的eWebOffice这个文件全部复制到resources的static下,SpringBoot默认读取,还有jquery,

4、配置application.properties

这里我们将eWebOffice的授权码放到配置文件里。

代码语言:javascript复制# orcle

spring.datasource.url=jdbc:oracle:thin:@******:orcl

spring.datasource.username= ***

spring.datasource.password= ***

spring.datasource.driverClassName = oracle.jdbc.OracleDriver

# 旧版的Oracle JDBC Driver Class :oracle.jdbc.driver.OracleDriver

# 新版的Oracle JDBC Driver Class :oracle.jdbc.OracleDriver

spring.datasource.hikari.maximum-pool-size=5

#缓存

spring.thymeleaf.cache=false

spring.thymeleaf.prefix=classpath:/page/

spring.thymeleaf.check-template-location=true

#调试日志打印

logging.level.com.sunnada.gaia.task.dao=DEBUG

#eWebOffice授权码

eWebOfficeLicense=***5、pom:

代码语言:javascript复制

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.sunnada.task

task-page

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

2.1.0.RELEASE

UTF-8

UTF-8

1.8

1.3.2

4.5.0.6

0.1

12.2.0.1

1.0

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-thymeleaf

com.sunnada

eWebOffice

${eWebOffice-version}

com.oracle

ojdbc8

${oracle-version}

io.springfox

springfox-swagger2

2.8.0

io.springfox

springfox-swagger-ui

2.8.0

com.fasterxml.jackson.core

jackson-core

2.9.7

org.mybatis.spring.boot

mybatis-spring-boot-starter

${mybatis-spring-boot-starte.version}

junit

junit

test

org.springframework.boot

spring-boot-test

2.1.0.RELEASE

test

org.springframework

spring-test

5.1.2.RELEASE

test

org.apache.tomcat.embed

tomcat-embed-jasper

javax.servlet

jstl

com.sun.el

el-ri

${er-ri-version}

org.junit.jupiter

junit-jupiter-api

org.springframework.boot

spring-boot-maven-plugin

org.mybatis.generator

mybatis-generator-maven-plugin

1.3.7

org.mybatis.generator

mybatis-generator-core

1.3.7

com.oracle

ojdbc8

12.2.0.1

Generate MyBatis Artifacts

deploy

generate

true

true

src/main/resources/mybatis-generator.xml

6、在线编辑页面

我们可以简单的做两个页面,

第一个页面是文件列表,第二个页面是编辑页面

default.html

代码语言:javascript复制

文档列表

名称 操作
编辑

documnet_edit.html

代码语言:javascript复制

eWebOffice示例 : 编辑文档


主 题

 

注意:只有进行“保存文档”后,所做的操作才有效!

作 者


重点代码是OnLoad()方法里的,文件打开的url、参数获取、及操作按钮工具栏设置等都在里面。

我的理解是这样的,控件本身也是有异步操作的。当我们在接收到第一个页面default.html的请求时,获取到各种参数,并在Init方法里初始化工具栏,我们也可以在Onload方法里设置,但是在Init方法里设置的,在页面显示到我们看到到最终都不会发生变化,但是在OnLoad方法里设置的,如果和Init方法里的不一样,本身加载文件也不会很快,所以按钮变化很明显。

在打开Word后,窗口的左上角有一个“全屏显示”的按钮,所以,我们可以把右上角的那个“全屏”按钮给隐藏,eWebOffice1.FFSBVisible=false;//右上角的全屏按钮是否显示

最后记得在所有设置完后调用:eWebOffice1.RefreshQuickBar();//在设置按钮后要刷新才效果,

才有效果。

7、然后是按钮设置。

按照自己的需求修改就可以了。

有一点我要提一下,就是js里的switch是严格比较,等价于“===”所有,我们在传入参数给s_WorkModeFlag时,我们知道是字符串,但是我们要明确他的类型,所以

8、页面基本设置完了,开始后台设置。

首先创建一个controller

代码语言:javascript复制package com.sunnada.gaia.task.controller;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.sunnada.gaia.task.model.DocumentFile;

import com.sunnada.gaia.task.service.DocumentFileService;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

/**

* eweboffice在线文档编辑

*

* @author 李瑞益

*/

@Controller

public class EwebOfficeTestController {

@Resource

private DocumentFileService documentFileService;

/**

* 默认页面

* @param model

* @return

*/

@GetMapping("/index")

public String index(Model model){

List all = documentFileService.getAll();

model.addAttribute("dataList",all);

return "default";

}

/**

* 跳转到编辑页面

* @param request

* @param response

* @return

*/

@GetMapping("/edit")

public String edit( HttpServletRequest request,HttpServletResponse response)

{

return "document_edit";

}

/**

* 使用下载本地打开的方式

* @param recordId

* @param fileName

* @param response

*/

@RequestMapping("/getFile")

public void getFile(String recordId,String fileName,HttpServletResponse response){

DocumentFile model = documentFileService.getByRecordId(recordId);

response.setContentType("ms-word");

response.setHeader("Content-Disposition", "attachment;filename="+fileName);

OutputStream os = null;

try {

os = response.getOutputStream();

os.write(model.getdFilebody());

os.flush();

} catch (IOException e) {

e.printStackTrace();

}finally {

if(os != null)

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}然后是servlet;为什么我们要用servlet我在这里讲一下:

控件有一个方法WebMsgLoad(PageContext),我们后续那些获取参数设置参数都是以这个为前提。而这个PageContext是jsp的内置对象,所以我们只能构造他

代码语言:javascript复制package com.sunnada.gaia.task.controller;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import javax.annotation.Resource;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.ewebsoft.eweboffice.eWebOfficeServer;

import com.sunnada.gaia.task.model.DocumentFile;

import com.sunnada.gaia.task.service.DocumentFileService;

import com.sunnada.gaia.task.util.EWebOfficeUtil;

/**

*

*

* @author 李瑞益

*/

@WebServlet(urlPatterns = "/loadWord")

public class LoadFileServelt extends HttpServlet {

/**

* eWebOffice的授权码

*/

@Value("${eWebOfficeLicense}")

private String license;

@Resource

private DocumentFileService documentFileService;

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

req.setCharacterEncoding("utf-8");

eWebOfficeServer wos = new eWebOfficeServer();

wos.SetLicense(license);

//加载数据

if (!wos.WebMsgLoad(getPageContext(this,req,resp))) {

return;

}

//获取到前端的操作符,进行操作判断

//判断什么操作

String s_action = wos.WebMsgGetString("Action");

//加载数据我们不在这里做,

if (s_action.equals("SAVEFILE")) {

//保存文件

save(wos);

}

}

//

// /**

// * 该方法弃用

// * @param wos

// */

// public void loadFile(eWebOfficeServer wos,String recordId){

// DocumentFile model = documentFileService.getByRecordId(recordId);

// //设置文档名和类型

// if(model.getdFiletype() != null)

// wos.WebMsgSetString("fileType",model.getdFiletype());

// //设置文档数据

// wos.WebMsgSetStream("fileBoby",model.getdFilebody());

// //加载文件

wos.WebMsgSetFile("word","C:\\Users\\LI\\Desktop\\test5.doc");

write(model.getdFilebody());

// //文档加载状态

// wos.WebMsgStatus("TRUE", "文件加载成功!");

// //将服务端数据发送到前端

// wos.WebMsgSend();

// }

public void save(eWebOfficeServer wos){

String s_RecordID = wos.WebMsgGetString("RecordID");

byte[] a_FileBody = wos.WebMsgGetStream("FileBody");

wos.WebMsgClear();

DocumentFile documentFile = documentFileService.getByRecordId(s_RecordID);

documentFile.setdFilebody(a_FileBody);

int update = documentFileService.update(documentFile);

//测试写入

// testWrite(documentFileService.getByRecordId(s_RecordID).getdFilebody());

if (update > 0) {

wos.WebMsgStatus("true","保存成功");

}

}

/**

* 获取servlet的PageContext对象

* @param servlet servlet对象

* @param request 请求

* @param response 响应

* @return

*/

public PageContext getPageContext(Servlet servlet,HttpServletRequest request,HttpServletResponse response){

return JspFactory.getDefaultFactory().getPageContext(servlet,request,response,null,true,8192,true);

}

public void testWrite(byte[] data){

OutputStream os = null;

try {

os = new FileOutputStream("C:\\Users\\LI\\Desktop\\changeWord.doc");

os.write(data);

os.flush();

} catch (IOException e) {

e.printStackTrace();

}

finally {

if(os != null)

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}最后不要忘了在主程序中加上servlet扫描

代码语言:javascript复制@SpringBootApplication

@MapperScan("com.sunnada.gaia.task.dao")

@ServletComponentScan("com.sunnada.gaia.task.controller")

public class Appliaction {

public static void main(String[] args){

SpringApplication.run(Appliaction.class);

}

}至此,简单的在线编辑结束。