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

问题描述 投票:0回答:7

我正在使用 html-pdf npm 模块创建 pdf 文件,在我的本地环境(mac、windows)中一切正常。但是,当我们在亚马逊 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
            });
        }                                
    });
}

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

javascript node.js pdf amazon-ec2
7个回答
7
投票

上面的代码绝对没有问题。但是, 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 版本没有错误。


2
投票

我遇到了同样的问题,在 google 上搜索后,按照 StackOverflow 和 GitHub 线程上的帖子进行操作对我来说不起作用。

后来我意识到并检查了 Phantomjs,发现服务器上缺少它。

我在 ubuntu 服务器上使用以下命令安装。

sudo apt-get install phantomjs

如果这对你有用,祝你玩得开心。


1
投票

我也有同样的问题。我们使用 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


0
投票

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

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

0
投票

跑步

export OPENSSL_CONF=/dev/null
npm start
为我修好之前


-1
投票

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

# System default
openssl_conf = default_conf

/etc/ssl/openssl.cnf


-3
投票

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

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

npm install -g html-pdf
© www.soinside.com 2019 - 2024. All rights reserved.