aspose-words 解决linux目录更新页码错乱问题

aspose-words 解决linux目录更新页码错乱问题


问题描述

aspose-words踩坑-windows环境下正常,在linux环境下目录的页码错乱

导出word我用的是poi-tl,poi-tl要对目录更新只能用Apache POI的document().enforceUpdateFields()来更新目录,但是使用enforceUpdateFields()方法导出的word文件打开的时候会有一个提示框,并且是不支持wps的,所以在目录更新我改用aspose-words


原因分析:

在window下没有问题但是在linux下有问题,说明不是代码或者输入输出流编码的问题,原因是两个平台环境的问题。说明linux环境中缺少相应的字体以供使用,可能会导致导出的文件字体乱码,或者更新域错乱问题。


解决方案:

1.更新字体

  1. 在linux环境下安装win字体,将win机器的C:\Windows\Fonts目录下的全部文件拷贝到linux服务器字体安装目录下,然后执行以下命令更新字体缓存。
    aspose-words 解决linux目录更新页码错乱问题_第1张图片
  2. linux字体库位置在/usr/share/fonts/,在这个目录下新建一个文件夹,将win下的字体文件全部拷贝进去
    aspose-words 解决linux目录更新页码错乱问题_第2张图片
  3. 安装字体命令
contos安装插件
yum install fontconfig
yum install mkfontscale

修改字体权限
chmod -R 755 /usr/share/fonts/chinese

安装字体命令
cd /usr/share/fonts/chinese
mkfontscale
mkfontdir 
fc-cache -fv

让字体生效命令
source /etc/profile

4.如果项目是用docker部署,可以在docker-compose文件里添加数据卷,共享宿主机字体。如果项目不是用docker部署这步跳过。

 ufo-evaluation:
    build:
      context: /root/build/evaluation
    image: ufo/evaluation:1.0.0.alpha
    container_name: ufo-evaluation
    command:
      - --spring.profiles.active=test
    ports:
      - "88:88"
     #共享宿主机字体
    volumes:
      - /usr/share/fonts/chinese:/usr/share/fonts/chinese
    privileged: true
    restart: always
    networks:
      - ufo_net
    depends_on:
      - ufo-redis
      - ufo-mysql

2.修改代码

		OsInfo osInfo = SystemUtil.getOsInfo();
		//如果是linux系统,使用/usr/share/fonts/chinese文件下的字体库
		if (osInfo.isLinux()) {
			FontSettings.getDefaultInstance().setFontsFolder("/usr/share/fonts/chinese", true);
		}
		//实例化document
		Document document = new Document(file.getPath());
		//aspose.words更新目录
		document.updateFields();
		//导出word
		document.save(response.getOutputStream(), SaveFormat.DOCX);

你可能感兴趣的:(运维,debian)