我正在使用 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
});
}
});
}
此处错误为 {},响应为 {}
上面的代码绝对没有问题。但是, 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 版本没有错误。
我遇到了同样的问题,在 google 上搜索后,按照 StackOverflow 和 GitHub 线程上的帖子进行操作对我来说不起作用。
后来我意识到并检查了 Phantomjs,发现服务器上缺少它。
我在 ubuntu 服务器上使用以下命令安装。
sudo apt-get install phantomjs
如果这对你有用,祝你玩得开心。
我也有同样的问题。我们使用 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
您可以使用一些东西来调试问题。
__dirname + '/uploads'
而不是'../uploads/'
fs
模块创建可写流跑步
export OPENSSL_CONF=/dev/null
在npm start
为我修好之前
看来所有的问题都在这一行。评论它会使错误消失:
# System default
openssl_conf = default_conf
/etc/ssl/openssl.cnf
html-pdf 是一个 npm 库,用于将 HTML 文件转换为 pdf。
使用此命令全局安装 html-pdf:
npm install -g html-pdf