【问题标题】:Blank pages in PDF retrieved from API从 API 检索的 PDF 中的空白页
【发布时间】:2017-05-15 05:56:11
【问题描述】:

我的 Web 应用程序正在向外部 API 发出 HTTPS GET 请求。我收到的是一个 PDF 文件,其开头为:

%PDF-1.4

我想做的是将此 PDF 保存在服务器上,以便将此文件提供给客户端。问题是 PDF 中有一些空白页应该没有。

这是负责检索 PDF 并将其保存到服务器的代码:

    Meteor.http.get('url/' + chartId,  {
      headers: {
        Authorization: 'Bearer ' + key.token
      }
    }, function(err, result) {
      if(!err) {
        var fs = Npm.require('fs');
        var path = process.env['METEOR_SHELL_DIR'] + '/../../../public';

        fs.writeFile(path + "/charts/" + Meteor.userId() + '.pdf', result.content, (function (err) {
          if (err) {
              console.log("Error:" + err);
          }
        }));

      } else {
        throw new Error('Error from API getting documents');
      }
    });

奇怪的是,我保存到服务器的 PDF 显示带有文本的页面,但在应该有图像(图表)的地方显示空白页面。也许这是一个编码问题?

【问题讨论】:

  • result.content 是否可以将内容作为字符串返回?在这种情况下,您将不得不寻找一个不同的属性,将其作为原始字节返回。
  • @mkl result.content 确实返回一串字符。不幸的是,这是我可以从响应中获得的唯一数据。有没有办法从这个字符串中获取原始字节?
  • 将二进制文件解释为文本通常是破坏性的,即不可逆的。由于我对 Javascript 尤其是 Meteor 不太了解,因此我不知道手头的情况是否是一个例外。
  • @mkl 我想我找到了问题所在。如果我下载原始且正确的 pdf 并在文本编辑器 (Atom) 中打开并保存它。它导致一个空白页。我认为当我尝试获取 HTTPS 内容结果并将其保存到文件或将其发送到客户端时,也会发生同样的事情。你知道这个问题的任何解决方法吗?

标签: node.js pdf meteor encoding fs


【解决方案1】:

好吧,我第一次猜到这与编码有关。 确保在 http 请求 encoding: 'binary' 上设置正确的标头,并在使用 .writeFile() 时使用正确的编码。

来源:Node express save pdf from binary string

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多