使用html-pdf创建PDF文件在我的部署服务器中不起作用?

时间:2016-05-21 13:04:51

标签: javascript node.js pdf amazon-ec2

我正在使用html-pdf npm模块创建一个pdf文件,一切都在我的本地环境(mac,windows)中正常工作。但是当我们在我们的amazon ec2服务器中部署相同的代码时,html-pdf的create()无法创建文件,也没有给我任何错误。我几乎通过异常处理,绝对路径等尝试了所有可能的方法。它们都不起作用。请有人帮我这个。我的代码是

function generatePdf(content, options, callback) {
    var fileName = new Date().getTime() + Math.random() + '.pdf';
    pdf.create(content, options).toFile('../uploads/' + fileName, function(error, response) {
        if (error) {
            callback(error);
        } else {
            callback({
                fileName: fileName,
                filePath: response.filename
            });
        }                                
    });
}

此处错误为{},响应为{}

6 个答案:

答案 0 :(得分:2)

SYAM,

上述代码完全没有问题。但是,为什么html-pdf lib在pdf.create(...)。toFile中没有抛出任何错误或创建文件的原因是由于您环境中安装的html-pdf版本中的错误。我们可以通过检查

来确定它

npm list html-pdf如果返回类似npm ERR的内容!代码1然后做

npm uninstall html-pdf and then do again
npm install html-pdf 

并重复上述步骤以确保当前安装的html-pdf版本中没有错误。

答案 1 :(得分:0)

html-pdf是一个npm库,用于将HTML文件转换为pdf。

使用以下命令全局安装html-pdf:

npm install -g html-pdf

答案 2 :(得分:0)

我遇到了同样的问题,在Google上搜索后,按照StackOverflow和GitHub线程上的帖子进行搜索对我来说并不可行。

后来我意识到并检查了Phantomjs,并在服务器上丢失了它。

我在Ubuntu服务器上使用以下命令进行安装。

sudo apt-get install phantomjs

如果这对您有用,请尽情玩乐。

答案 3 :(得分:0)

我遇到了同样的问题。我们正在使用docker进行部署。即“ node:12.17.0-alpine”

我在Dockerfile上添加了以下内容

 ENV PHANTOMJS_VERSION=2.1.1
 ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
 ENV PATH=$PATH:/home/node/.npm-global/bin
 RUN apk update && apk add --no-cache fontconfig curl curl-dev && \
    cd /tmp && curl -Ls https://github.com/dustinblackman/phantomized/releases/download/${PHANTOMJS_VERSION}/dockerized-phantomjs.tar.gz | tar xz && \
    cp -R lib lib64 / && \
    cp -R usr/lib/x86_64-linux-gnu /usr/lib && \
    cp -R usr/share /usr/share && \
    cp -R etc/fonts /etc && \
    curl -k -Ls https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-${PHANTOMJS_VERSION}-linux-x86_64.tar.bz2 | tar -jxf - && \
    cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs

答案 4 :(得分:0)

一些可以用来调试问题的东西。

  1. 可以使用try-catch方法代替if-else吗?和console.log(错误)。
  2. 使用__dirname代替相对文件地址。即; __dirname + '/uploads'代替'../uploads/'
  3. 尝试使用fs模块创建可写流

答案 5 :(得分:0)

似乎所有的问题都在这一行。评论它会使错误消失:

# System default
openssl_conf = default_conf

/etc/ssl/openssl.cnf