【问题标题】:PDF file creation using html-pdf is not working in my deployment server?使用 html-pdf 创建 PDF 文件在我的部署服务器中不起作用?
【发布时间】:2016-09-18 16:48:45
【问题描述】:

我正在使用 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


    【解决方案1】:

    上面的代码绝对没有错。但是,pdf.create(...).toFile 时 html-pdf lib 没有抛出任何错误或创建文件的原因是由于您环境中的 html-pdf 安装版本中的错误。我们可以通过检查来确定

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

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

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

    【讨论】:

    • "npm list html-pdf" 命令运行正常。我正在使用 docker 在 AWS 中部署它。仍然面临问题。
    • @NarayanShrestha:你能解决这些问题吗?你是怎么解决这个问题的?
    • @KhairulHabib 就我而言,我在 dockerfile 中解决了这个问题。 stackoverflow.com/a/65069207/10721322
    【解决方案2】:

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

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

    npm install -g html-pdf
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,在谷歌上搜索后,通过 StackOverflow 和 GitHub 线程上的帖子对我来说不起作用。

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

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

      sudo apt-get install phantomjs

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

      【讨论】:

      • 你抓住了它!谢谢:)
      • "phantomjs" 重命名为 phantomjs-prebuilt。请将“phantomjs”包引用更新为“phantomjs-prebuilt”。来源:npmjs.com/package/phantomjs
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          # System default
          openssl_conf = default_conf
          

          /etc/ssl/openssl.cnf

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-08
            • 2018-04-26
            • 2016-10-04
            • 2012-04-23
            • 1970-01-01
            相关资源
            最近更新 更多