准备
# 下载phantomjs
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs ./
rm -rf phantomjs-2.1.1*
# 查看宿主机安装的中文字体,选择一个复制到docker容器中即可
fc-list :lang=zh
cp /usr/share/fonts/chinese/SIMSUN.TTC .
Dockerfile
FROM openjdk:8
# 将宿主机中的中文字体复制到docker容器中,否则导出pdf时中文不能显示
RUN mkdir -p /usr/share/fonts/chinese
ADD SIMSUN.TTC /usr/share/fonts/chinese/SIMSUN.TTC
# docker容器中安装字体软件
RUN apt-get install -y fontconfig
# docker容器中刷新字体缓存。这个命令会扫描所有字体文件,然后注册它们。同时,它会生成一些字体缓存文件,这样系统就能快速找到并使用这些字体了
RUN fc-cache -f -v
# phantomjs软件
ADD phantomjs /usr/local/bin/phantomjs
# 生成pdf的逻辑
ADD one.js /usr/local/bin/one.js
ENV PHANTOMJS_EXECUTABLE /usr/local/bin/phantomjs
# 没有这个配置,容器中使用phantomjs文件时可能报错
# MODULE_RUN:unknown module name:conf_mod.c:222:module=ssl_conf
ENV OPENSSL_CONF /etc/ssl/
RUN mkdir -p /usr/local/app
WORKDIR /usr/local/app
ADD demo.jar /usr/local/app/demo.jar
EXPOSE 39080
CMD ["java", "-jar", "/usr/local/app/demo.jar"]
one.js
var page = require('webpage').create();
// 需要生成pdf的网页
var url = "http://www.baidu.com";
page.onConsoleMessage = function (msg) {
console.log(msg);
};
// 指定宽度
page.viewportSize = {width: 800};
// 下面的回调函数可以将html网页渲染成pdf和图片
page.open(url, function(status) {
window.setTimeout(function() {
page.render('/tmp/1.png');
page.render('/tmp/1.pdf');
phantom.exit();
}, 1000);
});
java中使用phantomjs
Runtime.getRuntime().exec("/usr/local/bin/phantomjs /usr/local/bin/one.js")
打镜像验证测试
docker build -t demo:1.0.0 .
docker run -d -p 39080:8080 --name demo demo:1.0.0