首页 > 其他分享 >Vue+springboot集成PageOffice实现在线编辑Word、excel文档

Vue+springboot集成PageOffice实现在线编辑Word、excel文档

时间:2023-07-20 16:13:11浏览次数:41  
标签:srb Vue Word excel fs pageoffice api poserver

说明:

PageOffice是一款在线的office编辑软件,帮助Web应用系统或Web网站实现用户在线编辑Word、Excel、PowerPoint文档。可以完美实现在线公文流转,领导批阅,盖章。可以给文件添加水印,在线安全预览防止用户下载和复制文件等

一、环境要求

前端Vue项目:Node.js10及以上版本(当前集成方式不支持vue3,原因是vue3不兼容ie。vue3集成pageoffice参考这个链接:Vue3.x+springboot集成pageoffice)

注意:pageoffice6.0的POBrowser换成谷歌内核了,可以支持vue3了!!!vue3项目可以用pageoffice6.0版本还是这种集成方式

后端Springboot项目:Intelij IDEA、jdk1.8及以上版本

二、前端项目

1、在index.html页面引用后端项目(samples-springboot-back)根目录下的pageoffice.js

<script type="text/javascript" src="http://localhost:8081/samples-springboot-back/pageoffice.js"></script>

2、在vue.config.js中配置代理

devServer: {
        proxy: {
        '/api': {
          target: 'http://localhost:8081/samples-springboot-back', //"/api"对应后端项目"http://localhost:8081/samples-springboot-back"地址 
          ws: true,
          changeOrigin: true, // 允许跨域
          pathRewrite: {
           '^/api': ''   // 标识替换,使用 '/api' 代替真实的接口地址
          }
        }
      }
    }

3、在index.vue页面添加一个按钮,通过点击事件调用POBrowser,第一个参数"SimpleWord/Word"是vue的路由。通过路由打开一个Word.vue页面

image

POBrowser.openWindowModeless('SimpleWord/Word', 'width=1150px;height=900px;')

4、在Word.vue页面created中通过axios请求后台获取pageoffice控件(注意:后台返回string字符串,前端需要使用v-html解析) 这里给后台发请求的是axios,如果需要添加token可以在main.js中配置拦截器给请求添加token
image
Word.vue页面,可以直接复制后修改url

<template>
	<div class="Word">
		<div style="height: 800px; width: auto" v-html="poHtmlCode" />
	</div>
</template>
<script>
const axios = require("axios");
export default {
  name: "Word",
  data() {
    return {
      poHtmlCode: "",
    };
  },
  created: function () {
    axios
      .post("/api/SimpleWord/Word")
      .then((response) => {
        this.poHtmlCode = response.data;
      })
      .catch(function (err) {
        console.log(err);
      });
  },
  methods: {
    //控件中的一些常用方法都在这里调用,比如保存,打印等等
    /**
     * Save()方法是/api/SimpleWord/Word这个后台controller中PageOfficeCtrl控件通过poCtrl.addCustomToolButton定义的方法,除了保存还有另存到本地、打印等功能。
     */
    Save() {
      document.getElementById("PageOfficeCtrl1").WebSave();
    }
  },
  mounted: function () {
    // 将PageOffice控件中的方法通过mounted挂载到window对象上,只有挂载后才能被vue组件识别
    window.Save = this.Save;
  },
};
</script>

三、后端项目 三、后端项目

1、在pom中添加pageoffice依赖

   <dependency>
       <groupId>com.zhuozhengsoft</groupId>
       <artifactId>pageoffice</artifactId>
       <version>5.4.0.3</version>
   </dependency>

2、在启动类中配置servlet bean,poSysPath是在properites中配置的磁盘路径(注意:pageoffice的poserver.zz等这些请求不要拦截,get和post请求都放出来)

image
image

@Bean
    public ServletRegistrationBean pageofficeRegistrationBean() {
        com.zhuozhengsoft.pageoffice.poserver.Server poserver = new com.zhuozhengsoft.pageoffice.poserver.Server();
        poserver.setSysPath(poSysPath);//设置PageOffice注册成功后,license.lic文件存放的目录
        ServletRegistrationBean srb = new ServletRegistrationBean(poserver);
        srb.addUrlMappings("/poserver.zz");
        srb.addUrlMappings("/posetup.exe");
        srb.addUrlMappings("/pageoffice.js");
        srb.addUrlMappings("/jquery.min.js");
        srb.addUrlMappings("/pobstyle.css");
        srb.addUrlMappings("/sealsetup.exe");
        return srb;
    }

3、打开文件的controller(webopen第一个参数是当前文件的磁盘路径,磁盘路径必须反向双斜杠)。setServerPage和setSaveFilePage中的api是前端代理,前后端分离项目必须配置代理

@RestController
@RequestMapping(value = "/SimpleWord")
public class SimpleWordController {

       @RequestMapping(value="/Word")
       public String showWord(HttpServletRequest request) {

           PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
           poCtrl.setServerPage("/api/poserver.zz");//设置服务页面
           poCtrl.addCustomToolButton("保存", "Save", 1);

           poCtrl.setSaveFilePage("/api/SimpleWord/save");//设置保存方法的url
           //打开word
           poCtrl.webOpen("D:\\doc\\test.docx", OpenModeType.docNormalEdit, "张三");
           return  poCtrl.getHtmlCode("PageOfficeCtrl1");
       }

       @RequestMapping("save")
       public void save(HttpServletRequest request, HttpServletResponse response) {
           FileSaver fs = new FileSaver(request, response);
           fs.saveToFile("D:\\doc\\" + fs.getFileName());
           fs.close();
       }
   }

4、save保存文件

 @RequestMapping("save")
        public void save(HttpServletRequest request, HttpServletResponse response) {
            FileSaver fs = new FileSaver(request, response);
            fs.saveToFile("D:\\doc\\" + fs.getFileName());
            fs.close();
        }

四、最终效果

image

原文链接:https://blog.csdn.net/qq_44306545/article/details/127749139

标签:srb,Vue,Word,excel,fs,pageoffice,api,poserver
From: https://www.cnblogs.com/qq742655/p/17568656.html

相关文章

  • Vue项目常见问题处理
    开发环境推荐使用node14版本,可以尽可能的减少版本兼容导致的问题。安装依赖包报错大部分安装依赖包错误是编译环境不完整引起的(例如:gyp相关错误),请确保编译环境安装完整(以管理员身份运行cmd): npminstall--global--production--verbosewindows-build-toolsnpminstall......
  • 【Vue】vue获取dom元素
    vue中准确的拿到那个元素用ref,ref是绑定给子组件<普通元素也可以绑定ref>ref如果是绑定在组件中的,那么通过this.$refs.ref的name获取到的是一个组件对象ref如果是绑定在普通的元素中的,那么通过this.$refs.ref的name获取到的是一个元素对象 html<divref='a'>aaaaa......
  • vue-element-admin改为从后台拿动态指令权限(按钮)- 下
    改为从后台拿动态指令权限,大概如下步骤:1、后台修改接口返回指令权限数据2、修改src/store/modules/permission.js修改generateRoutes,添加保存 指令权限3、修改验证指令去权限方法(checkPermission:src/utils/permission.js、v-permission:src/diective/permission/permi......
  • 关于vue3使用setup语法糖获取不到组件实例内部的变量
    //子组件<template><div>{{count}}</div><template<scriptsetup>import{ref}from'vue'constcount=ref(0)</script>//父组件<template><div><Childref="child"/>......
  • java实现excel的下载和导入
    Java实现Excel的下载和导入Excel是广泛使用的电子表格软件,常用于数据存储和分析。在Java中,我们可以使用ApachePOI库来处理Excel文件。本文将介绍如何使用Java实现Excel的下载和导入功能,并提供相应的代码示例。1.Excel下载要实现Excel的下载,我们首先需要创建一个Excel文件,并将......
  • vue生成二维码以及获取当前的地址url
    <template> <divclass="hello">  <h2>二维码</h2>  <canvasref="qrCodeCanvas"></canvas><div>{{url}}</div> </div></template><script>importQRCodefrom'qrco......
  • Vuex的例接以及核心属性
    Vuex是vue用户状态管理的,核心就是store(仓库),它的5个核心属性分别是State、Getter、Mutation、Action、Module。state:管理存放数据,包括数组、对象、字符串,只能通过mutations和actions来修改getter:类型计算属性,...mapGetters([""])引用,返回值会根据它的依赖被缓存起来,只有依赖......
  • Vue利用element ui分栏,并将threejs插入到main
    目录1.在node.js官网下载2.在win+r中输入cmd打开管理员:命令提示符3.cmd命令下载安装淘宝镜像上的npm包4.cmd命令安装vuecli,并验证是否安装成功5.通过vueui命令以图形化界面创建和管理项目6.vue项目创建完成,在终端里安装elementui7.在main.js文件中引入element8.利用element进行......
  • html5页面中使用vue组件DEMO
    资源下载npmhttp-vue-loader:https://www.npmjs.com/package/http-vue-loader http-vue-loader.js下载 普通html5使用vue组件1、页面引入相关JS文件 2、创建components组件 3、主页面创建vue实例 引入相关组件名 4、html中使用vue组件 ......
  • 58.请使用vue3+vite+typescript+element-plus+setup语法糖,使用xlsx和file-saver实现保
    1<template>2<div>3<el-table4:data="mergedTableData"5border6stripe7>8<!--表头-->9<el-table-column10prop="date"11label="......