PageOffice最简集成代码(VUE+.NetCore)
# PageOffice最简集成代码(VUE+.NetCore)
本文描述了PageOffice产品在(VUE+.NetCore)前后端分离的项目中如何集成调用。
假设开发环境电脑IP为:
192.168.1.100
# 后端.NetCore项目
新建.NetCore后端项目:netcore-back。比如,项目端口为:5000
在此项目的“依赖项-包-管理NuGet程序包”中搜索到“Zhuozhengsoft.PageOffice"程序后安装最新版本。
下载PageOffice客户端安装程序。
- windows客户端安装程序:posetup_6.x.x.x.exe;
- 国产操作系统客户端安装程序:对应芯片的PageOffice客户端deb安装包;
PageOffice客户端安装程序下载地址:https://www.zhuozhengsoft.com/dowm/ (opens new window)
拷贝PageOffice客户端安装程序到项目的bin目录下(项目的生成目录,比如:bin\Debug\net5.0)
修改Startup.cs文件,添加PageOffice服务器端程序的相关配置,代码如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseMiddleware<PageOfficeNetCore.POServer.ServerHandlerMiddleware>();
}
如果是.Net6项目,就在Program.cs文件中添加代码:app.UseMiddleware<PageOfficeNetCore.POServer.ServerHandlerMiddleware>();
- 在D盘根目录下准备一个有内容的test.docx文件。
- 新建WordController,并编写代码在线打开test.docx。WordController.cs代码如下:
public class DocController : Controller
{
public string OpenWord()
{
PageOfficeNetCore.PageOfficeCtrl poCtrl = new PageOfficeNetCore.PageOfficeCtrl(Request);
poCtrl.SaveFilePage = "/Doc/SaveFile"; //设置处理保存客户端上传文件流的Action方法
poCtrl.WebOpen("D:\\test.docx", PageOfficeNetCore.OpenModeType.docNormalEdit, "tom");
string poHtmlCode = poCtrl.getHtml();
return poHtmlCode;
}
//接收客户端上传的文件流,并保存到文件
public async Task<ActionResult> SaveFile()
{
PageOfficeNetCore.FileSaver fs = new PageOfficeNetCore.FileSaver(Request, Response);
await fs.LoadAsync();
fs.SaveToFile("D:\\" + fs.FileName);
return fs.Close();
}
}
# 前端vue项目
新建Vue前端项目:vue-front
Vue配置代理。
devServer: { proxy: { '/dev-api': { // "/dev-api"对应后端项目"http://192.168.1.100:5000"地址 target: 'http://192.168.1.100:5000', ws: true, //v6.6+必须,启用websocket。 changeOrigin: true, pathRewrite: { '^/dev-api': '' } }, } }引用js-pageoffice库。
注意:请确保安装的js-pageoffice库版本号与后端项目pom.xml文件中引用的PageOffice JAR包版本号的前三位相同。
使用命令安装:npm install js-pageoffice@6.5.4 --save-exact
在全局拦截器中添加PageOffice相关配置。
import { POBrowser } from "js-pageoffice"; // 请求拦截器 service.interceptors.request.use( (config) => { // 在发送请求之前做些什么 //const token = Cookies.get('token'); // 假设你的token存储在cookie中 const token = "123"; if (token) { config.headers["Authorization"] = "Bearer " + token; // 将token添加到请求头中 // PageOffice全局配置,必须在此拦截器中定义 //必须。设置后端代理,具体属性值以您实际开发为准,比如POBrowser.setProxyBaseAPI(process.env.VUE_APP_BASE_API); POBrowser.setProxyBaseAPI("/dev-api"); //必须。向PageOffice后端请求设置header,支持多次调用setHeader()设置更多的值,具体属性名称和属性值以您实际开发为准。 POBrowser.setHeader("Authorization", "Bearer " + token); /** * 前端存储token的方案 *方案1.使用Cookie *如果您的令牌(token)存储在Cookie中,PageOffice会默认支持通过Cookie方式保存令牌,因此您无需编写任何额外的代码。 *方案2.使用Localstorage或者SessionStorage *如果令牌(token)是保存在LocalStorage或SessionStorage中,您必须调用POBrowser.setStorage()方法。 */ //POBrowser.setStorage("Admin-Token",getToken());//支持多次调用setStorage()设置更多的值,具体属性名称和属性值以您实际开发为准。 } return config; }, (error) => { // 对请求错误做些什么 return Promise.reject(error); } );新建一个Vue页面:src/views/DocView.vue,用来显示在线打开的文档。
<template> <div class="doc"> 演示: 文档<br /><br /> <!-- 此div用来加载PageOffice客户端控件 --> <div style="width:auto; height:900px;" v-html="poHtmlCode"></div> </div> </template> <script> import request from '@/utils/request' export default { name: 'DocView', data() { return { poHtmlCode: '' } }, created: function () { // 使用window.external.UserParams获取获取父页面(此项目中为:HomeView.vue)中POBrowser.openWindow()方法的第三个参数的值,获取到的值为string类型 let paramValue = window.external.UserParams; let person = JSON.parse(paramValue); // 请求后端打开文件 this.openFile().then(response => { this.poHtmlCode = response; } ); }, methods: { OnPageOfficeCtrlInit() { // PageOffice的初始化事件回调函数,您可以在这里添加自定义按钮 pageofficectrl.AddCustomToolButton("保存", "Save", 1); }, Save() { pageofficectrl.WebSave(); }, AfterDocumentOpened() { // PageOffice的文档打开后事件回调函数 }, BeforeDocumentSaved() { // PageOffice的文档保存前事件回调函数 }, AfterDocumentSaved() { // PageOffice的文档保存后事件回调函数 }, openFile(){ //发起GET请求到后端Controller的/Doc/OpenWord路由 return request({ url: '/Doc/OpenWord', method: 'get', }) } }, mounted: function () { // 以下的为PageOffice事件的回调函数,名称不能改,否则PageOffice控件调用不到 window.OnPageOfficeCtrlInit = this.OnPageOfficeCtrlInit; window.Save = this.Save; window.AfterDocumentOpened = this.AfterDocumentOpened; window.BeforeDocumentSaved = this.BeforeDocumentSaved; window.AfterDocumentSaved = this.AfterDocumentSaved; } } </script>配置DocView.vue的访问路由。
const routes = [ // 其他路由配置项... // 下面添加DocView.vue的路由 , { path: '/showDoc', name: 'doc', component: () => import('../views/DocView.vue') } ]在您的Vue页面(比如HomeView.vue,PageOffice中把这个页面称之为父页面)添加一个打开文件的超链接,点击超链接调用POBrowser对象的openWindow方法,弹出PageOffice浏览器(POBrowser)窗口访问DocView.vue在线打开文件,代码如下:
<a href="#" @click.prevent="open_pageoffice()">打开文件</a><script> import request from '@/utils/request' import { POBrowser } from 'js-pageoffice' export default { name: 'HomeView', data() { return { } }, methods: { open_pageoffice() { let person = {}; person.name = '张三'; person.age = 18; POBrowser.openWindow('/showDoc', 'width=1150px;height=900px;', JSON.stringify(person)); } } } </script>启动netcore-back和vue-front项目,点击“打开文件”超链接,查看在线打开编辑保存Office文件的效果。