[PageOffice]关于PageOffice你要知道的一些细节及避坑1.0

关于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.com/dowm/

关于离线注册,你需要完成pageOffice的初始化后,打开弹窗会提示你注册,输入注册信息后点击离线注册,获取离线注册的一串代码,去到离线注册的两个网站,复制黏贴这串代码就可以下载license.lic了。以下两个网站还是要区分一下的,免得输入代码后,无法生成下载license.lic文件。

​ 国产版离线注册:https://www.zhuozhengsoft.com/po/reggc.aspx

​ 非国产版离线注册:https://www.zhuozhengsoft.com/po/reg.aspx

离线注册主要还是服务于内网环境,通网情况下直接注册即可。

更详细的文档请查看官网:https://www.zhuozhengsoft.com/

五、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="+"参数");
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值