功能: 实现是卡片分享的功能
开始技术选型选的是DJNativeSwing,但是windows是可以使用,发布到linux就不行了。虽然参照前辈方法进行解决,还是一直报org.eclipse.swt.SWTError:No more handles [gtk_init_check() failed]异常。在长时间未解决这个问题。只好
一、服务器安装 phantomjs 工具
1、解压安装包phantomjs-2.1.1-linux-x86_64.tar
2、设置环境变量 exportPATH=/usr/local/phantomjs-2.1.1-linux-x86_64/bin:$PATH
3、安装phantomjs相关包(图片字体)
sudo yum install bitmap-fontsbitmap-fonts-cjk
4、安装完成测试
cd /usr/local/phantomjs-2.1.1-linux-x86_64/examples
phantomjs hello.js
查看结果是否打印:hello,world!
5、碰到特殊字体linux上没有。需要导入字体
新建目录/usr/share/fonts/newfonts
将font.zip压缩包解压到newfonts文件夹
sudo mkfontscale
sudo mkfontdir
sudo fc-cache –fv
二、Java代码那块( 这边实现会在服务器生成一个本地html文件,调用phantomjs读取本地html文件进行截图)代码只贴了部分代码,复制过去需要自行调整才能执行
private static final String EXE_COMMAND = "phantomjs";
private static final String BLANK = " ";
/**
*
* <p>
* Description: 删除html文件/判断文件是否生成成功 返回结果是否成功
* </p>
* @author ---
* @created 2018年1月19日 上午9:54:01
* @param result phantomjs返回结果
* @param shareCardPath 生成卡片路径
* @param resultHtmlAddress html地址
* @return boolean
*/
private boolean handleResult(String result,String shareCardPath, String resultHtmlAddress,boolean checkFileIsCreate) {
Process process = Runtime.getRuntime().exec(PhantomjsService.EXE_COMMAND + BLANK //你的phantomjs.exe路径
+ getExeScriptPath() + BLANK // 截图 javascript脚本的存放路径
+ resultHtmlAddress + BLANK //你的目标url地址
+ shareCardPath);//你的图片输出路径
inputStream = process.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
String result = reader.readLine();
return handleResult(result,shareCardPath, resultHtmlAddress);
}
createArticleCard.js 代码:
var webPage = require('webpage');
var system = require('system');
var address = system.args[1];
var output = system.args[2];
var page = webPage.create();
page.viewportSize = {
width : 750,
height : 100
};
page.open(address, function(status) {
if (status == "success") {
var length = page.evaluate(function(s) {
var div = document.getElementById("screenshot");
var bc = div.getBoundingClientRect();
var top = bc.top;
var left = bc.left;
var width = bc.width;
var height = bc.height;
window.scrollTo(0, 10000);// 滚动到底部
return [ top, left, width, height ];
});
page.clipRect = {
top : length[0],
left : length[1],
width : length[2],
height : length[3]
};
page.render(output);
console.log("success");
phantom.exit();
} else {
console.log(status);
phantom.exit(1);
}
});