2017-10-05 4 views
0

L'utilisation de JSReport pour générer des sorties pour l'impression et des problèmes de sauvegarde du fichier PDF renvoyé par l'API.API JSReport. Enregistrer le fichier PDF à partir de la réponse

J'utilise ce code pour enregistrer le fichier:

var options = { method: 'POST', 
     url: 'http://192.168.100.64:5488/api/report', 
     headers: 
     { 'postman-token': '81e5ced9-d7b1-80bd-5948-a6934e67d4ae', 
      'cache-control': 'no-cache', 
      'content-type': 'application/json' }, 
     body: 
     { template: { shortid: 'HJsjiZhob' }, 
      data: 
      { Badges: badges }, 
      options: { 'Content-Disposition': 'Attachment; filename=badges.pdf' } }, 
     json: true }; 

     rq(options, function (error, response, body) { 
     if (error) throw new Error(error); 
     console.dir(body); 
     // fs.writeFileSync(path.join(config.outFolder, 'badges.pdf'), body, 'binary'); 
     // console.log('Wrote PDF File'); 
     fs.writeFile(path.join(config.outFolder, 'badges.pdf'), body, 'binary', (err) => { 
      if(err) log.error(err); 
      log.info('Successfully Wrote Badge Sheet.'); 
     }); 
     }); 

mais le PDF est vide, mais je peux confirmer avec PostMan que le rapport fonctionne avec le code suivant:

var options = { method: 'POST', 
    url: 'http://192.168.100.64:5488/api/report', 
    headers: 
    { 'postman-token': '81e5ced9-d7b1-80bd-5948-a6934e67d4ae', 
    'cache-control': 'no-cache', 
    'content-type': 'application/json' }, 
    body: 
    { template: { shortid: 'HJsjiZhob' }, 
    data: 
     { Badges: 
     [ { Event: 'Event Name', 
      Email: '[email protected]', 
      Attended: '', 
      'First Timer': '', 
      'Last Name': '---', 
      Name: 'Jim', 
      Address: 'AddressLine', 
      'City, State Zipcode': 'Charleston, WV 25311', 
      City: 'Charleston,', 
      State: 'WV', 
      zipcode: '25311' } ] }, 
    options: { 'Content-Disposition': 'Attachment; filename=badges.pdf' } }, 
    json: true }; 

request(options, function (error, response, body) { 
    if (error) throw new Error(error); 

    console.log(body); 
var options = { method: 'POST', 
    url: 'http://192.168.100.64:5488/api/report', 
    headers: 
    { 'postman-token': '81e5ced9-d7b1-80bd-5948-a6934e67d4ae', 
    'cache-control': 'no-cache', 
    'content-type': 'application/json' }, 
    body: 
    { template: { shortid: 'HJsjiZhob' }, 
    data: 
     { Badges: 
     [ { Event: '2017 West Central Regional Forum', 
      Email: '[email protected]', 
      Attended: '', 
      'First Timer': '', 
      'Last Name': 'Withrow', 
      Name: 'Jim', 
      Address: '1578 Kanawha Blvd., Apt. # E 8C', 
      'City, State Zipcode': 'Charleston, WV 25311', 
      City: 'Charleston,', 
      State: 'WV', 
      zipcode: '25311' } ] }, 
    options: { 'Content-Disposition': 'Attachment; filename=badges.pdf' } }, 
    json: true }; 

request(options, function (error, response, body) { 
    if (error) throw new Error(error); 

    console.log(body); 
}); 

Le premier bloc de code enregistre le fichier sous la forme d'un PDF vierge avec un certain nombre de pages, le second bloc lorsqu'il est utilisé avec le facteur génère une boîte de dialogue de sauvegarde de fichier avec le texte approprié sur la page pour l'impression.

Où est le bogue?

Répondre

0

Selon l'équipe d'administration de JSReport, la bonne façon d'utiliser dans NodeJS et demande est la suivante:

var options = { method: 'POST', 
    url: 'http://192.168.100.64:5488/api/report', 
    headers: 
    { 'postman-token': '81e5ced9-d7b1-80bd-5948-a6934e67d4ae', 
     'cache-control': 'no-cache', 
     'content-type': 'application/json' }, 
    body: 
    { template: { shortid: 'HJsjiZhob' }, 
     data: 
     { Badges: badges }, 
     options: { 'Content-Disposition': 'Attachment; filename=badges.pdf' } }, 
    json: true }; 
    rq(options) 
     .on('response', (response) => { 
     console.log(response.statusCode); 
     console.log(response.headers['content-type']); 
     }) 
     .on('error', (err) => {throw new Errror(err)}) 
     .on('end',() => log.info('Successfully Wrote Badge Sheet')) 
     .pipe(fs.createWriteStream(path.join(config.outFolder, 'badges.pdf')));