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

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

时间:2023-01-10 11:01:46浏览次数:69  
标签:srb Vue Word excel fs pageoffice api poserver

说明:

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

一、环境要求

二、前端项目

  1. 在index.html页面引用后端项目(samples-springboot-back)根目录下的pageoffice.js
<script type="text/javascript" src="http://localhost:8081/samples-springboot-back/pageoffice.js"></script>
  1. 在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' 代替真实的接口地址
          }
        }
      }
    }
  1. 在index.vue页面添加一个按钮,通过点击事件调用POBrowser,第一个参数"SimpleWord/Word"是vue的路由。通过路由打开一个Word.vue页面
POBrowser.openWindowModeless('SimpleWord/Word', 'width=1150px;height=900px;')
  1. 在Word.vue页面created中通过axios请求后台获取pageoffice控件(注意:后台返回string字符串,前端需要使用v-html解析) 这里给后台发请求的是axios,如果需要添加token可以在main.js中配置拦截器给请求添加token

在这里插入图片描述
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>
  1. 在启动类中配置servlet bean,poSysPath是在properites中配置的磁盘路径(注意:pageoffice的poserver.zz等这些请求不要拦截,get和post请求都放出来)
    在这里插入图片描述
    在这里插入图片描述
@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;
    }
  1. 打开文件的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();
        }
 
 
    }
  1. save保存文件
 @RequestMapping("save")
        public void save(HttpServletRequest request, HttpServletResponse response) {
            FileSaver fs = new FileSaver(request, response);
            fs.saveToFile("D:\\doc\\" + fs.getFileName());
            fs.close();
        }

四、最终效果

在这里插入图片描述

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

相关文章

  • 【转】PageOffice在线只读打开word文件并禁止复制
    一、PageOffice禁止复制1、poCtrl.setAllowCopy(false);//禁止拷贝,权限比较大,系统的快捷键Ctrl+C,Ctrl+V也会受到影响,但是可以在其他程序中可以使用右键菜单进行拷贝粘贴操......
  • vuejs实现复制功能
    1、效果图 2、创建copyComm.js文件importVuefrom'vue';constvCopy={//名字爱取啥取啥  /*   bind钩子函数,第一次绑定时调用,可以在这里做初始......
  • vue cli -webpack 引入字体文件.ttf不生效(开发环境)
    本示例是引入的‘站酷庆科黄油体’下载字体文件后一定要在windows中打开.ttf文件看一下字体名称是什么保证assets下xxfont.css文件里的font-family与下载字体文件里看到......
  • Vue + Element 自定义上传封面组件
    前一段时间做项目,频繁使用到上传图片组件,而且只上传一个封面,于是想着自定义一个图片封面上传组件。先来看一下效果:            第一张图片是上传......
  • VUE一个仿微信提现的功能
     UI组件用的是vant的键盘组件1:HTML部分<divclass="withdraw_page"><divclass="withdraw_page_header"><divclass="withdraw_page_header_......
  • Vue搭建项目的完整流程 如何搭建一个完整的vue项目 vue项目架构
    vue项目架构技术栈:vue3、vue-router、vuex(和pinia)、elementplus、axios、ts、sass1、安装vue3脚手架+tsvuecreateadmin2、分析目录结构node_modules......
  • 菜鸡的bug-vue组件中传递的数据能显示,但是控制台报not defind的错误
    在vue开发的父子组件传值的时候,我们一般都是先封装一个子组件,给他取名字,然后在要用到此组件的页面,也就是所说的父组件中将这个子组件导入、注册、再使用。我们一般都是用驼......
  • 菜鸡的bug-vue父子传值props的报错
    我们在vue中通过props来进行父子传值的时候,在当前页面没有问题,但是切换到其他页面的时候控制台会报错。后来我们会发现在props中简单的接受单个属性的时候没什么问题,但是......
  • Vue 跳转页面传参
    初创建于:2022-07-0811:03要在vue中跳转页面时传递参数,首先需要引入useRoute与useRouter:import{useRouter,useRoute}from'vue-router';constroute=use......
  • VUE3 AXIOS 封装
    网上找了很多AXIOS的封装但是都不是很满意,后来参考其他人的实现做了改动后特分享出来http.ts文件封装importtype{AxiosRequestConfig,AxiosResponse}from'axios......