与aws-lambda

时间:2017-11-15 20:46:17

标签: node.js phantomjs aws-lambda

我正在使用PhantomJS将网页转换为PDF。 当我在开发环境中运行代码时,输​​出文件大小约为几KB,但是当我在AWS-Lambda上运行相同的代码时,输​​出文件大小约为几MB。

我想生成一个与开发环境大小相同的pdf文件。

以下是我用于转换的代码

var system = require('system');
var page = require('webpage').create();

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36';

var url = system.args[1];
var file_name = system.args[2]
var margin = system.args[3];

page.paperSize = {
    format: 'A2',
    orientation: 'portrait',
    margin:  JSON.parse(margin)
};

page.evaluate(function () {
    var style = document.createElement('style');
    style.innerHTML = '.card-padding{padding-top: 0;padding-bottom: 0;}';
    document.body.appendChild(style);
})

page.open(url, function start(status) {
    window.setTimeout(function () {
        page.render(file_name, {format: 'pdf'});
        system.stdout.write(file_name)
        phantom.exit();
    }, 5000);
});

我也尝试设置页面dpi

page.open(url, function start(status) {
    window.setTimeout(function () {
        page.dpi=72
        page.render(file_name, {format: 'pdf'});
        system.stdout.write(file_name)
        phantom.exit();
    }, 5000);
})

但它没有帮助。 您可以找到项目here

1 个答案:

答案 0 :(得分:0)

解决方案;

  • 创建.fonts文件夹
  • 将您在PDF中使用的字体放在.fonts文件夹
  • 将环境变量添加到lambda HOME = /var/task

它会显着缩小文件大小。

问题是什么;

debian和ubuntu上的PhantomJs v2.1.x至少正确处理本地字体,即它们嵌入在pdf中,因此在屏幕上以高质量呈现,文本可搜索和可选,文件大小保持低。对于远程webfonts,文本将转换为轮廓,不嵌入字体,文本不会被搜索和选择,并且对于较长的文档,文件大小会很大。