前言
最近项目中需要实现将某url网页转换成pdf文件的功能。调研了多个插件和api,发现不是存在html或css兼容限制,就是js不支持等问题。靠谱一点的思路方案就是调用Chrome浏览器的打印pdf组件,这样就大大提高了渲染的兼容性,但是java直接调用安装好的浏览器不是很便捷。
感谢同事在git上找到了一个基于springboot的现成项目:《tal-tech/h5-transfer-pdf》,它是调用nodejs模块实现的,可以将网页HTML渲染为PDF和各种图像格式的API工具,完美兼容HTML、CSS、JS,较好的排版支持,并支持生成多种版本的PDF。详情文档可参考这里。
简介
考虑到以后的便捷发布,我准备把它做成一个docker项目。接下来就是,对Dockerfile不太熟的我,通过摸索试错,完成了基础镜像的创建,以及docker构建脚本的编写,最终实现了单独部署。经测试效果还不错,这里记录一下整个改造过程。
环境
- docker
- docker-compose
- centos7
步骤
一、构建自己的基础镜像
项目中需要依赖java、node、同时还要支持中文,于是我要构建一个基础镜像,这里命名为xiajunyi/centos7-java8-node10去支持上述环境。
1.下载一个镜像
在dockerhub上找了一个同时支持centos、jdk、node的镜像:1
docker pull reiniergs/centos7-jdk-node-browsers:latest
2.运行上述镜像
下面是docker-compose配置xjy-java.yml:1
2
3
4
5
6
7
8
9
10
11
12version: '2'
services:
javanode:
image: reiniergs/centos7-jdk-node-browsers
container_name: xjy-java-node
tty: true
restart: always
networks:
- xjynet
networks:
xjynet:
external: true
运行启动容器1
docker-compose -f xjy-java.yml up -d
3.安装nodejs模块
将git上下载的static文件夹下的nodejs文件整个复制到容器中1
docker cp static/ xjy-java-node:/script/
接下来,进入容器中/script文件夹中,执行安装命令1
npm install
4.安装中文字体
这个跟着网上参考文档的步骤走就可以了,大体思路是,将windows系统中的中文字体复制到容器中,然后执行相关命令安装到linux中。
5.生成自己的基础镜像
完成上述安装后,我们的环境基本上搭建完成,可以把当前的容器构建成我的基础镜像了。1
docker commit -m 我的基础镜像 --author xiajunyi xjy-java-node xiajunyi/centos7-java8-node10:v1.0.0
当然也可以推送到自己的dockerhub仓库中去:1
docker push xiajunyi/centos7-java8-node10:v1.0.0
二、Dockerfile构建
1.下载源代码:
1 | git clone https://github.com/xiajunyi/h5-transfer-pdf.git |
2.修改application.properites配置
1 | server.port=8084 |
3.编写Dockerfile
1 | FROM xiajunyi/centos7-java8-node10:v1.0.0 |
三、docker镜像生成及部署
1.编译项目
1 | mvn clean package -DskipTests |
2.生成docker镜像
有了Dockerfile文件以后,再修改java部分的代码只需执行新的构建命令即可:1
docker build -t xiajunyi/pdftools:v1.0.0 .
也可以将镜像推送到自己的dockerhub仓库中去:1
docker push xiajunyi/pdftools:v1.0.0
3.部署运行容器
docker-compose文件配置xjy-pdftools.yml如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14version: '2'
services:
xjy-pdftools:
image: xiajunyi/pdftools:v1.0.0
container_name: xjy-pdftools
volumes:
- /mnt/docker/tmp:/pdftools/tmp
ports:
- 8084:8084
networks:
- xjynet
networks:
xjynet:
external: true
运行容器:1
docker-compose -f xjy-pdftools.yml up -d
四、测试效果
下面是两个常用api,可以用来测试效果:
1.转换返回pdf文件名
1 | curl --location --request POST 'http://al.xiajunyi.com:8084/rest/pdf/render' \ |
2.转换直接返回pdf文件流
1 | curl --location --request GET 'http://al.xiajunyi.com:8084/rest/pdf/show' \ |
结束语
好了,这次docker实战就到这里,如果需要该pdf转换功能的,也可以直接拉取我上传到dockerhub上的镜像《xiajunyi/pdftools》部署测试哦!
本文链接: https://www.xiajunyi.com/pages/p72.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!