docker容器中使用PhantomJS

423 阅读1分钟

准备

# 下载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