Node express save pdf from binary string

13,547

I found the problem! I needed to specify 'encoding': 'binary' in request options and in writeFile: fs.writeFile(file, body, 'binary', function(err) {.

Now I can open and send correctly image and pdf from binary string.

Share:
13,547
Alessandro Mercurio
Author by

Alessandro Mercurio

Updated on July 16, 2022

Comments

  • Alessandro Mercurio
    Alessandro Mercurio almost 2 years

    I have a problem saving a pdf file from binary data. I get the binary from a web service and my express server (as middleware) should send the file to the client. The problem is that client and adobe acrobat reader show a blank pdf, so I'm thinking that I done some error saving/encoding the binary data.

    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();
    
    
      });
    }
    

    I also tried to use createWriteStream instead of writeFile, with and without encoding option

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

    The string that I get from web service is something like this:

    %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
    

    What I'm doing wrong? I just have a function that get an image (from the same web service) in base64 and I save it on server file system with writeFile and it works well.

    Thanks for help

  • Linx
    Linx over 6 years
    This helped me a ton! Thank you for sharing
  • Satyajeet
    Satyajeet about 5 years
    Thanks a ton. Wasted more then 2 hours.
  • Hariharan AR
    Hariharan AR almost 5 years
    @Ciotto I tried this code. It create a pdf file. but, i can't open the file. it show me the "Can't validate the signature"
  • Alessandro Mercurio
    Alessandro Mercurio almost 5 years
    Hi @HariharanAR unfortunately I didn't work on this project anymore and I never managed pdf with signature. Can you share your code to be sure that you do it correctly?
  • sudonitin
    sudonitin almost 4 years
    I am getting a blank PDF with the expected number of pages. @Ciotto