PhantomJS 篇
标签: #Share
PhantomJS 组件常用在爬虫领域,但是它也有其非常灵活的一面,即用作截取网页长图,或者将网页内容存储为PDF
PhantomJS 下载
Windows使用
下载完成后,直接解压即可直接进行使用,同时调用PhantomJS.exe时需要配合JS一同使用,以转出PNG图片或者PDF为例
JS文件
// JS -> 可直接运行生成PDF或者PNG HTML转PDF需求解决方案:HTML -> PNG -> PDF或者HTML -> PDF
var page = require('webpage').create(),
system = require('system'),
address, output, size;
if (system.args.length < 3 || system.args.length > 5) {
console.log('Usage: rasterize.js URL filename');
phantom.exit(1);
} else {
// 目标地址
address = system.args[1];
// 输出地址
output = system.args[2];
// 尺寸 1200*7000
size = system.args[3].split('*');
console.log(page.settings.userAgent );
page.settings.loadImages = true;
page.paperSize = {width: size[0], height: size[1], orientation: 'portrait', border: '0.5cm' };
console.log("open page now");
page.open(address, function (status) {
console.log(status);
// 预留一定的渲染时间
window.setTimeout(function () {
page.render(output);
page.close();
console.log('Render ok');
phantom.exit();
}, 3000);
});
};
命令如下
F:\browsers\phantomjs-2.1.1-windows\bin>
phantomjs.exe html2pdf.js "参数一:URL" "参数二:输出文件地址可以为xxx.png或者xxx.pdf" "尺寸如:1200*6500"
命令参数根据JS文件调整即可 输出文件为 .pdf 即输出PDF文件,为.png即输出截图图片
与此同时JS文件中的尺寸大小可以直接调整为如A4纸等等
JS文件Tips
// 如果想要强行对PDF内容进行分页,对需要分页的内容增加以下样式即可
.pdf-page {
page-break-before: always;
page-break-after: always;
page-break-inside: avoid;
}
Linux环境使用
PhantomJS 安装步骤:
- 下载安装包并解压
- 安装依赖软件: yum -y install wget fontconfig
- 设置环境变量:ln -s /目标地址/bin /usr/bin/
- phantomjs -v 检测是否安装成功
- 安装中文字体:
centos中执行 :yum install bitmap-fonts bitmap-fonts-cjk
ubuntu中执行:sudo apt-get install ttf-wqy-zenhei #文泉驿-正黑 (全平台兼容字体)
其余使用方式同windows一致,通过 phantomjs xxx.js 参数一 参数二….
值得注意的是:Linux的PDF渲染效果不如Windows,Mac好
PNG图片转PDF代码技巧
可以直接将PNG图片完美塞入到PDF中,缺点即不可直接复制文字
<!-- 生成PDF -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
public class PDFUtils {
public static void imgToPdf (String imgUrl, String pdfUrl) throws IOException, DocumentException {
Document doc = new Document(PageSize.A4, 20, 20, 20, 20);
PdfWriter.getInstance(doc, new FileOutputStream(pdfUrl));
doc.open();
// Img
Image png = Image.getInstance(imgUrl);
png.setAlignment(Image.MIDDLE);
doc.setPageSize(new Rectangle(png.getPlainWidth(), png.getPlainHeight() + 300F));
doc.newPage();
doc.add(png);
doc.close();
}
}
中文乱码问题
在使用Ubuntu服务器作为截图以及渲染PDF介质时,会遇到很坑的中文乱码问题,一般解决办法是下载安装文泉驿宋体,但是经过
测试,在苹果手机,电脑等依然会是乱码,因此针对ubuntu服务器,可以使用文泉驿正黑字体解决乱码问题:
sudo apt-get install ttf-wqy-zenhei #文泉驿-正黑 (全平台兼容字体)
Ubuntu如果需要安装其他字体,参考步骤:
# 安装字体管理工具
sudo apt-get install font-manager
# 查看现有字体(可查看到字体安装位置)
fc-list
安装字体:
# 安装字体
# 方式一:
# 在/usr/share/fonts目录下,新建如 chinese文件夹,将需要的tff文件复制进文件夹,如微软雅黑等
# 然后执行如下命令:
mkfontscale
mkfontdir
fc-cache -fv (刷新字体缓存)
# 方式二,通过软件安装:
sudo apt-get install ttf-wqy-microhei #文泉驿-微米黑
sudo apt-get install ttf-wqy-zenhei #文泉驿-正黑 (全平台兼容字体)
sudo apt-get install xfonts-wqy #文泉驿-点阵宋体
# 注意通过软件安装的方式,其实也是在/usr/share/fonts目录下新建了文件夹并移入了tff字体,因此卸载逻辑和下面一致
卸载字体:
# 卸载字体的方式非常简单,例如我们新建了chinese目录,只需要 rm -rf ....chinese(包含字体的目录)
# 再刷新字体缓存即可
rm -rf /usr/share/fonts/demo
fc-cache -fv
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!