springboot整合paggeoffice在线编辑器
简介:PageOffice并不是一个普通的办公软件,而是一款专为政府、企事业单位内部管理系统设计的在线文档编辑控件。它的主要功能是让您的管理软件系统能够在浏览器中直接打开和编辑真正的Word文档,而无需离开系统或依赖外部云服务。
它能够集成到各种内部管理软件(如电子政务、OA、公文系统、ERP、CRM、合同管理、档案管理等)中,允许用户通过网页浏览器直接在线编辑和保存 Word、Excel 等文档,尤其是具备与本地 Word/WPS 相媲美的全功能编辑能力。PageOffice 还支持根据数据库内容和模板自动生成文档、控制可编辑区域、拆分合并、模板套红、修订痕迹、电子签名、插入印章及水印等功能,大大提升了内部管理系统的办公自动化效率。
1.数据准备
(1)下载pageoffice安装包,地址:https://www.zhuozhengsoft.com/PageOffice/
(2)下载pageoffice依赖
全套资料已上传csdn:https://mp.csdn.net/mp_download/manage/download/UpDetailed
2.安装pageoffice.exe,要使用pageoffice前提必须安装office或WPS,且安装好pageoffice软件
3.编写后端代码,这里使用pageoffice-5.4.0.8.jar和springboot2.6.4
(1)注册pageoffice插件
package com.runnet.bus.controller;
import com.zhuozhengsoft.pageoffice.poserver.Server;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.URL;
@RestController
@RequestMapping("pageoffice")
@Api(tags = "PageOffice")
@Slf4j
public class PageOfficeController {
//pageoffice.exe所在地址
@Value("${pageoffice.poSysPath}")
private String poSysPath;
@Bean
public ServletRegistrationBean pageofficeRegistrationBean() {
//创建公共word文件夹
// File dir = new File(poSysPath);
// if (!dir.exists()) {
// dir.mkdirs();
// }
//可以通过传入参数 反射入口类 的方式创建一个新bean -> builder
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ServletRegistrationBean.class);
Server poserver = new Server();
// System.out.println("poSysPath:" + poSysPath);
log.info("poSysPath:" + poSysPath);
boolean flag = poSysPath.startsWith("classpath:");
if (flag) {
log.info("flag:" + flag);
poSysPath = poSysPath.replaceAll("classpath:/", "");
log.info("poSysPath:" + poSysPath);
// 项目路径中查找文件
URL resource = PageOfficeController.class.getResource("/");
String path = (resource.getPath() + poSysPath).replaceFirst("/", "");
// log.error(path);
log.info("path:" + path);
poserver.setSysPath(path);
} else {
log.info("系统路径中查找文件");
//系统路径中查找文件
poserver.setSysPath(poSysPath);
}
builder.addPropertyValue("servlet", poserver);
/**如果当前项目是打成jar或者war包运行,强烈建议将license的路径更换成某个固定的绝对路径下,不要放当前项目文件夹下,为了防止每次重新发布项目导致license丢失问题。
* 比如windows服务器下:D:/pageoffice,linux服务器下:/root/pageoffice
*/
//设置PageOffice注册成功后,license.lic文件存放的目录
//poSysPath可以在application.properties这个文件中配置,也可以直设置文件夹路径,比如:poserver.setSysPath("D:/pageoffice")
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;
}
}
(2)保存-编辑代码
import com.zhuozhengsoft.pageoffice.FileSaver;
import com.zhuozhengsoft.pageoffice.OpenModeType;
import com.zhuozhengsoft.pageoffice.PageOfficeCtrl;
/**
* 参数可自定义
*/
public ModelAndView editFile(String id, HttpServletRequest request, HttpServletResponse response, Map<String, Object> map, String userName, String type) {
// TODO: pageoffice的在线编辑
实体 product = getById(id);
if (Common.isEmpty(product)) {
throw new Exception("文件不存在");
}
String path = Common.toString(product.getProductPath()); // 获取文件相对路径
System.out.println("文档的相对路径:" + path);
//获取文件存储路径
String rootpath = "/home/file/";
System.out.println("文件存储路径:" + rootpath);
//总路径拼接实体保存的文件相对路径
String SaveFilePath = rootpath + path;
File file = new File(SaveFilePath);
System.out.println("文件路径:" + file.getAbsolutePath());
if (!file.exists()) {
new BusinessException("文件路径无效,对应文档不存在");
}
try {
PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
//此路径为项目服务路径,如微服务则为ip:网关端口/服务名,引用pageoffice依赖默认暴露/poserver.zz和/pageoffice.js
String dada = "/api/"+request.getContextPath() + "/poserver.zz";
System.out.println("dada:" + dada);
poCtrl.setServerPage(dada);//设置服务页面
if (type.equals("1")) {
System.out.println("file.getAbsolutePath()" + file.getAbsolutePath());
// 打开word http://ip:duan/file1/
poCtrl.webOpen(file.getAbsolutePath(), OpenModeType.docNormalEdit, userName);
// 设置处理文件保存的请求方法
poCtrl.setSaveFilePage("/api/xxxx/productsFileSave" + "?" + "id=" + id);
// 添加自定义保存按钮
poCtrl.addCustomToolButton("保存", "Save", 1);
} else {
// 只读打开
poCtrl.webOpen(file.getAbsolutePath(), OpenModeType.docReadOnly, userName);
}
map.put("pageoffice", poCtrl.getHtmlCode("PageOfficeCtrl1"));
//此静态页面需要添加到项目目录中
ModelAndView mv = new ModelAndView("wordEditPage");
return mv;
} catch (Exception e) {
e.printStackTrace();
System.out.println("错误:" + e);
return null;
}
}
public void productsFileSave(String id, HttpServletRequest request, HttpServletResponse response) {
//获取文件存储路径
String rootpath = "/home/file/";
实体 product = getById(id);
String path = Common.toString(product.getProductPath()); // 获取文件相对路径
String url = rootpath + path;
// 保存修改后的文件
FileSaver fs = new FileSaver(request, response);
fs.saveToFile(url);
fs.close();
System.out.println("保存成功");
}
4.可能遇到的一些坑
(1)点击编辑文档按钮无反应打不开pageoffice窗口,大概率是没有获取到pageoffice.js,检查获取该js的路径。
(2)打开了pageoffice窗口白屏,是请求editFile方法路径有问题,检查该路径,具体访问路径可在请求/poserver.zz
时查看。也可能是要打开的文件路径没有找到该文件。注:大坑:在linux上部署请求文件时,会默认把请求pageoffice.js的前缀ip+端口拼在相对路径前面导致打不开文档,在Windows上一切正常,暂未找到修改前缀的办法,需配置nginx代理使之能正常访问文件资源。
(3)当此代码String dada = request.getContextPath() + "/1poserver.zz";
配置请求路径有问题时,会报当前网站可能启用了Windows集成验证或其他HTTP验证方式。
或pageoffice网络连接意外错误
原文地址:https://blog.csdn.net/m0_49605579/article/details/144431137
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!