【问题标题】:Node express save pdf from binary string节点快速从二进制字符串中保存 pdf
【发布时间】:2017-01-22 00:29:01
【问题描述】:

我在从二进制数据中保存 pdf 文件时遇到问题。我从 Web 服务获取二进制文件,我的快速服务器(作为中间件)应该将文件发送到客户端。 问题是客户端和 adobe acrobat reader 显示空白 pdf,所以我认为我在保存/编码二进制数据时做了一些错误。

exports.downloadReceipt = function(req, res) {
  var idPrenotazione = req.params.idPrenotazione;
  var options = {
    'method': 'GET',
    'uri': api_url + '/ricevute/'+idPrenotazione,
    'headers': {
      'Authorization': req.get('Authorization')
    }
  }

  request(options, function(error, response, body) {
    var date = new Date().getTime();
    var filename = 'ricevuta_'+idPrenotazione+'_'+date+'.pdf';
    var file = folderPath + filename;

  fs.writeFile(file, body, function(err) {
    if(err)
      console.log(err);
    else
      console.log("The file was saved!");
  });      

  // for the moment I only save the file on server file system
  res.end();


  });
}

我也尝试使用 createWriteStream 代替 writeFile,有和没有编码选项

  var options = { encoding: 'binary' };
  var wstream = fs.createWriteStream(file_);
  wstream.write(body);
  wstream.end();

我从网络服务得到的字符串是这样的:

%PDF-1.5
%����
2 0 obj
<</Length1 17948/Length 9587/Filter/FlateDecode>>stream
x��{y`՝���!ɖ-Y�iɖF�e˖,۲lَ��v�$���s8v��B�$�(4nHiI�RP��@�n�����׶���-P�-Wbi����H��������y��|���^��}3�p9� -[3�~�+���< ��l�E���E7�7��Њ�+�l\�1��?P��rt�
�G��!}ؿj���ɿ~�@�+H߰
o�t�&��u��5m�??ن�5�~���e�����й��޼�3����#��~���ԷX��%����������
k\��\z���d���O�x@�A9(-�A>�@`�B0�  �`+ؠ���Q��\ �<��R�A��*��*A5�@-��"P
�Fh�f�-� 

[.....]

0000042111 00000 n 
0000042252 00000 n 
0000042393 00000 n 
trailer
<</Root 7 0 R/ID [<10edca6daaad5a49919bad108ba77f0a><492e2d9a8ca810421f41667217724e69>]/Info 4 0 R/Size 183>>
%iText-5.5.8
startxref
173008
%%EOF

我做错了什么?我只有一个在 base64 中获取图像(来自同一个 Web 服务)的函数,然后我使用 writeFile 将它保存在服务器文件系统上,它运行良好。

感谢您的帮助

【问题讨论】:

    标签: node.js file pdf express binary


    【解决方案1】:

    我发现了问题!我需要在请求选项和 writeFile 中指定'encoding': 'binary'fs.writeFile(file, body, 'binary', function(err) {

    现在我可以从二进制字符串正确打开和发送图像和 pdf。

    【讨论】:

    • 这对我帮助很大!谢谢分享
    • 非常感谢。浪费了2个多小时。
    • @Ciotto 我试过这段代码。它创建一个pdf文件。但是,我无法打开文件。它显示“无法验证签名”
    • 嗨@HariharanAR 不幸的是,我不再从事这个项目,也从未管理过带有签名的pdf。你能分享你的代码以确保你做的正确吗?
    • 我收到了一份空白 PDF,其中包含预期的页数。 @Ciotto
    【解决方案2】:

    对于那些有空白 pdf 的人,您必须添加这些请求参数:

    responseType: "arraybuffer",
    responseEncoding: "binary"
    

    来源:here

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多