mrafiqk / html-pdf-node

187 stars 119 forks source link

Returned pdf is corrupted #50

Closed AliYar-Khan closed 1 year ago

AliYar-Khan commented 2 years ago

I am using it with loop back. My Remoting method is as follows:

Visitor.getVisitorsPDF = function (res, dateInStart, dateInEnd, employeeSiteId, name, visitorCompany, employeeName, typeId, shift, cb) {
    Visitor.app.models.user.testAccess(res).then((current) => {
      let dStart = new Date(dateInStart).getTime();
      let dEnd = new Date(dateInEnd).getTime();
      dateInStart = new Date(dateInStart).getTime() - 60000000;
      dateInEnd = new Date(dateInEnd).getTime() + 60000000;
      res.set('Content-Type', 'application/octet-stream');
      res.set('Content-Disposition', 'attachment;filename="visitors.pdf"');
      let query = { where: { and: [{ timeIn: { gte: dStart, lt: dEnd } }] } };
      if (employeeSiteId) {
        query.where.and.push({ siteId: Number(employeeSiteId) });
      }
      if (typeId !== -1) {
        query.where.and.push({ typeId });
      }
      if (current.accountId != SUPER_USER) {
        query.where.accountId = current.accountId;
      }
      Visitor._getVisitors(query, current).then(
        (visitors) => {
          let visitorsFiltered = visitors.filter((v) => {
            if (!v.tztimeIn) return v;
            let d = v.timeIn + v.tztimeIn * 60000;
            if (dStart < d && d < dEnd) return v;
          });
          if (name)
            visitorsFiltered = visitorsFiltered.filter((v) => {
              if (v.name && v.name.toLowerCase().indexOf(name.toLowerCase()) > -1) return v;
            });
          if (visitorCompany)
            visitorsFiltered = visitorsFiltered.filter((v) => {
              if (v.company && v.company.toLowerCase().indexOf(visitorCompany.toLowerCase()) > -1) return v;
            });
          if (employeeName) {
            visitorsFiltered = visitorsFiltered.filter((v) => {
              if (v.employeeName && v.employeeName.toLowerCase().indexOf(employeeName.toLowerCase()) > -1) return v;
            });
          }
          visitorsFiltered.shift = shift;
          Visitor._getVisitorsPDF(visitorsFiltered).then(
            (result) => {
              res.send(result);
            },
            (err) => cb(err),
          );
        },
        (error) => cb(error),
      );
    });
  };
  Visitor.remoteMethod('getVisitorsPDF', {
    description: 'Get visitors list in PDF file',
    accepts: [
      { arg: 'res', type: 'object', http: { source: 'res' } },
      { arg: 'dateInStart', type: 'string' },
      { arg: 'dateInEnd', type: 'string' },
      { arg: 'employeeSiteId', type: 'string' },
      { arg: 'name', type: 'string' },
      { arg: 'visitorCompany', type: 'string' },
      { arg: 'employeeName', type: 'string' },
      { arg: 'typeId', type: 'number' },
      { arg: 'shift', type: 'number' },
    ],
    returns: { arg: 'content', type: 'Buffer' },
    http: { path: '/getpdf', verb: 'get' },
  });

And pdf method is as follows :

Visitor._getVisitorsPDF = async function (visitors) {
    let file = { content: '<h1>Hello wordl</h1>' };

    let options = { format: 'A4' };

    html_to_pdf.generatePdf(file, options).then((pdfBuffer) => {
      console.log('PDF Buffer:-', pdfBuffer);
      return pdfBuffer;
    });
  };

But the returned pdf is corrupted can't load the pdf what is the issue ?

adamalexander commented 1 year ago

@AliYar-Khan any resolution of this issue?

AliYar-Khan commented 1 year ago

@adamalexander I abandoned this and used the pdfKit for my purpose