admin管理员组文章数量:1644618
关于PageOffice你要知道的一些细节
一、pageOffice打开报脚本错误
首先就是使用pageOffice,需要注意你的IE浏览器(对就是IE浏览器不是谷歌火狐之类的浏览器,就是系统自带的浏览器),在pageOffice5.0版本,pageOffice使用POBrowser打开的窗口,实际上就是使用IE浏览器生成的一个窗口,所需要的IE内核版本也是比较高的,若你在部署pageOffice的时候,弹窗提示你出现脚本错误,类似 什么什么 app.js
有错误,说明你需要升级你的IE浏览器版本,可以升级到ie11。目前pageOffice的官网只能获取到6.0以下的版本,需要更高版本需要和该软件公司方申请。
二、整合后,项目打包war包问题
其次就是当你编写完pageOffice一定要记得修改license文件的路径,比如说你放在启动类的下面的静态路径
private static final String sysPath =
System.getProperty("user.dir") + "/demo/demo-upms-biz/lic";
但是,当你将项目打包成war包后,部署的过程中系统会去这个找这个路径,由于这个路径在项目的内部,故一定会出错,进而导致你项目出错只能重新打包,心态爆炸!。
##报错信息
Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server;
nested exception is org.springframework.beans,factory.BeanCreationException: Error creating
bean with name 'pageofficeRegistrationBean' defined in com.pig4cloud.pig.admin
.PigAdminApplication: Bean instantiation viafactory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to instantiate
(orgspringframework.boot.webservlet.ServletRegistrationBean]: Factory method
'pageofficeRegistrationBeanthrew exception; nested exception is java,lang.Exception;
The/opt/tongtch/tongweb/bin/demo-upms/demo-upms-biz/lic/" does not exist。
以linux系统为例子,打包项目war包放在该系统的Tongweb或者Tomcat服务器上,应该指明你的license文件与linux系统服务器本地,例如下:
private static final String sysPath = "/root/pageOffice/lic";
/root/pageOffice/lic 这个路径存放license.lic文件 再去通过Bean去构造,这里获取sysPath
这个变量后,添加url映射,前端就可以正常通过url访问pageOffice相关的静态资源。
@Bean
public ServletRegistrationBean pageofficeRegistrationBean() {
Server poserver = new Server();
//设置PageOffice注册成功后,license.lic文件存放的目录
poserver.setSysPath(sysPath);
//poSysPath可以在application.properties这个文件中配置,也可以直设置文件夹路径,比如:poserver.setSysPath("D:/pageoffice");
ServletRegistrationBean srb = new ServletRegistrationBean(poserver);
srb.addUrlMappings("/pageOffice/poserver.zz");
srb.addUrlMappings("/pageOffice/posetup.exe");
srb.addUrlMappings("/pageOffice/pageoffice.js");
srb.addUrlMappings("/pageOffice/jquery.min.js");
srb.addUrlMappings("/pageOffice/pobstyle.css");
srb.addUrlMappings("/pageOffice/sealsetup.exe");
return srb;
}
三、pageOffice的静态资源放行问题
现在的项目大多数都是使用Spring Cloud或者Spring Cloud alibba架构的,那你肯定有一个子系统(以下简称为auth)是负责做认证和授权的,有其他的子系统是做业务的。
提前声明一下:以下是讲解在没有Nacos这个子系统下你应该如何做,但是若你有Nacos的情况之下,可以参数直接在注册中心使用ignore-urls放行静态资源请求,若你配置了但是不能放行,可以下方评论交流一下。
好,那现在开始。
由于pageOffice的代码需要在业务逻辑层调用,这里我们就称之为在 admin子系统中调用,你在admin的启动类中注入了pageOffice的Bean之后,你想让前端以 http:[ip]:[port]/admin/pageoffice/**的方式来访问调取静态资源,比如pageoffice.js这个资源。
如若你没有在系统中正确放行该资源的话,打开浏览器的开发者工具,选择network ,点击查看js文件,你会发现你获取pageOffice.js的状态码是401,未授权的。这里有个疑问,明明我在auth这个子系统里面已经配置好放行了(如下代码),怎么还是报错?
// /auth/config
@Configuration(proxyBeanMethods = false)
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/css/**","/pageOffice/**");
}
}
原因在于,pageOffice的静态资源是放在admin当中,注入到Bean里面的,在admin中若没有直接编写类继承WebSecurityConfigurerAdapter去放行响应的静态资源的话,那么无法直接跨越auth获取静态资源,除非你可以获取令牌再进行请求资源,那也是可以的,但是考虑到静态资源需要在前端全局页面做申请再使用,使用获取令牌的方式要再做考究。
同样的在admin的src/main/java/[packageName]下创建一个配置类就可以,可以参考以下代码去配置:
//admin/config
@Primary
@Order(90)
@Configuration(proxyBeanMethods = true)
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web
.ignoring()
.antMatchers("/pageOffice/**");//放行PageOffice相关资源的请求
}
}
获取后在开发者工具可以看到如下:
四、PageOffice的离线注册问题
license.lic的文件是不通用的,每一个系统都需要自行注册生成一个license.lic。需要注册的要到卓正软件的下载中心下载,这里可以点击跳转到码云后,查看项目的README.md文件,内有写明你注册需要的序列号,有两个版本可以选择。
传送门:https://www.zhuozhengsoft/dowm/
关于离线注册,你需要完成pageOffice的初始化后,打开弹窗会提示你注册,输入注册信息后点击离线注册,获取离线注册的一串代码,去到离线注册的两个网站,复制黏贴这串代码就可以下载license.lic了。以下两个网站还是要区分一下的,免得输入代码后,无法生成下载license.lic文件。
国产版离线注册:https://www.zhuozhengsoft/po/reggc.aspx
非国产版离线注册:https://www.zhuozhengsoft/po/reg.aspx
离线注册主要还是服务于内网环境,通网情况下直接注册即可。
更详细的文档请查看官网:https://www.zhuozhengsoft/
五、pageOffice的保存方法传参
有两种传递参数的方式,一般情况下都是后端打开Word文件流的时候,传递参数,如以下示例:
@RequestMapping(value="/Word")
@ResponseBody
public String showWord(HttpServletRequest request ) throws UnsupportedEncodingException {
PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
//设置服务页面,/api是前端vue项目的代理地址
poCtrl.setServerPage("/admin/pageOffice/poserver.zz");
//....若干代码
//设置保存方法的url
poCtrl.setSaveFilePage("/savePage?param="+"参数");
}
@RequestMapping(value = "savePage")
public void saveOffice(HttpServletRequest request, HttpServletResponse response) throws Exception {
//。。。
}
而在一些特需需求的时候,需要传递一些动态的参数,这个时候需要另外一种传递参数的方式。具体实现就是通过标签的hidden属性,赋值后通过后端接收。
——隐藏域,在页面上不显示,但是可以将参数传递给下一页,也可以被本页的javascript函数获取。隐含域主要用于提交表单的时候传递动态参数。
于是便有以下:
<body>
<input id="hiddenParam" name="hiddenParam" type="hidden" value=""/>
</body>
动态赋值:
document.getElementById("hiddenParam").value = "动态参数值";
后续只需要调用pageOffice的webSave()方法,调用即可传递。
假如设置好的保存接口映射为“/savePage”,并且参数为整形如下:
@RequestMapping(value = "savePage")
public void saveOffice(HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取请求上的文件流
FileSaver fs = new FileSaver( request, response );
//获取参数
Integer hiddenParam = Integer.valueOf(fs.getFormField("hiddenParam"));
}
六、保存方法的父映射与子映射问题
若控制类存在父映射的情况下,容易误写成
poCtrl.setSaveFilePage("/pageOffice/savePage?param="+"参数");
但是保存方法访问的时候就会识别错误,会提示类似无法找到 "/pageOffice/pageOffice/savePage"的报错日志。
正确的写法应该是:
poCtrl.setSaveFilePage("/savePage?param="+"参数");
本文标签: 你要细节PageOffice
版权声明:本文标题:[PageOffice]关于PageOffice你要知道的一些细节及避坑1.0 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729393525a1199651.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论