需求功能:将已生成的ppt转为pdf以实现预览功能。
因为卡了好多天,因此将踩过的坑做个总结。
文章目录
1. 访问生成的问件跨域(nginx转发没有配置跨域)
解决方案: 添加匹配允许跨域的配置
location /ppt/ {
# 设置允许跨域的域,* 表示允许任何域,也可以设置特定的域
add_header 'Access-Control-Allow-Origin' '*';
# 允许的方法
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# 允许的头信息字段
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
# 缓存时间
add_header 'Access-Control-Max-Age' 1728000;
alias /home/XXX/file/;
}
2. 依赖 aspose-slides 为商业包 有水印且无法在中央仓库下载
问题详述:
aspose-slides 无法在中央仓库https://repo.maven.apache.org/maven2/ 或者阿里云仓库等下载需要配置其公司私有仓库
解决方案:
- 这里首先选择在官网中查找最新版本。依赖下载网址:https://releases.aspose.com/slides/java/
下载后打入本地依赖(但是有水印)。 - 后续发现阿里云仓库中有去水印版本的依赖,经过选择后引入以下依赖(相关版本可以在阿里云仓库中自行寻找):
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>aspose-slides</artifactId>
<version>23.1</version>
</dependency>
3. windows正常使用 linux下转换失败
问题详述:
对于常用的java11版本,无论是docker容器部署方式还是服务器直接部署 aspose-slides
依赖在linux下无法使用,但是在windows下功能正常。
解决方案:
使用jdk11在linux会报错sun.font…或者其余警告报错等,总结为一些java内部方法无法通过反射找到。估计原因是因为依赖构建时是采用低版本的jdk因此决定降低java版本,使用jdk8构建项目并且将此功能单独抽离达成微服务项目。选用oracle官方提供的镜像dockette/jdk8
。
4. 字体展示为小方块
问题详述:
经过以上的处理 在linux下已经可以看到pdf中有内容了,但是文字展示为小方块,图示入下:
问题分析:
分析认为内容已经转成功了 可能是因为没有linux中不含字体,因此需要在linux系统中添加字体文件。
解决方案:
-
在windows中 C:\Windows\Fonts 文件夹中找到引用的字体(这里用的是宋体)
-
将字体上传到linux中 位置为
/usr/share/fonts
-
找到容器id运行命令(这里有个坑,容器可能会默认不安装 fontconfig工具)
docker exec -it fe7f84eb63fd /bin/bash
或者docker exec -it fe7f84eb63fd sh
使用fc-list
命令来检查系统是否已经安装了Fontconfig。如果命令返回fc-list: command not
found,则表示Fontconfig尚未安装。
如果未安装则需要重新构建镜像 需要在dockerFile文件中添加以下指令
RUN apk add --no-cache fontconfig
-
进入容器内部输入指令:
cd /usr/share
mkdir fonts
在另外的窗口将字体传入docker容器中
docker cp simsun.ttc fe7f84eb63fd:/usr/share/fonts/
再回到容器内部的窗口输入fc-list
验证
然后需要重启容器!!!
-
验证功能:已经可以成功展示与下载。
`