Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | 1x 1x 1x 1x 1x 1x 1x 1x | 'use strict';
 
const puppeteer = require('puppeteer');
const logger = require('../../services/logger');
const config = require('../../server/config.json');
 
module.exports = function(PDF) {
  PDF.createPdf = async (id, lang, accessToken, cb) => {
    const base = `${config.protocol}://${config.serviceDomain ? config.serviceDomain : config.host}${config.serviceDomain? '' : `:${config.uiPort}`}`;
    try{
      const browser = await puppeteer.launch({headless: true, args: ['--no-sandbox']});
      const layoutResult = await PDF.findOne({where: {UserId: accessToken.userId}});
      let layout;
      if(layoutResult){
        layout = layoutResult.Layout;
      } else {
        layout = 'summary';
      }
      const site = `${base}/resources/${id}/print?token=${accessToken.id}&layout=${layout}&generation=true&lang=${lang}`;
      // console.log(site)
      const page = await browser.newPage();
      /* page.on('console', msg => console.log('PAGE LOG:', msg.text()));
      await page.evaluate(() => console.log(`url is ${location.href}`)); */
      await page.goto(site, {waitUntil: 'networkidle0'});
      const pdf = await page.pdf({
        preferCSSPageSize: true,
        displayHeaderFooter: true,
        headerTemplate: '<p style="margin-top: -20mm !important"></p>',
        footerTemplate: '<p style="font-size:10px; margin-left:550px;" class="pageNumber"></p>',
        width: '210mm',
        height: '297mm',
        margin: {
          top: '20mm',
          left: '2mm',
          bottom: '40mm',
          right: '2mm'
        }
      });
      await browser.close();
      await cb(null, pdf, 'application/pdf');
    } catch (error) {
      logger.error(`Error creating PDF, ${error}`);
      throw error;
    }
  };
 
  PDF.remoteMethod('createPdf', {
    http: {
      verb: 'get'
    },
    accepts: [
      {
        arg: 'id',
        type: 'number'
      },
      {
        arg: 'lang',
        type: 'string'
      },
      {
        arg: 'accessToken',
        type: 'object',
        http: ctx => ctx.req.accessToken
      }
    ],
    returns: [
      {
        arg: 'pdf',
        type: 'file',
        root: true
      },
      {
        arg: 'Content-Type',
        type: 'string',
        http: { target: 'header' }
      }
    ]
  });
 
  PDF.selectedLayout = async (layout, accessToken) => {
    try{
      const oldLayout = await PDF.findOne({where: {UserId: accessToken.userId}});
      if(oldLayout){
        oldLayout.updateAttributes({
          Layout: layout
        });
      } else {
        PDF.create({
          UserId: accessToken.userId,
          Layout: layout
        });
      }
      return 'success';
    } catch (error) {
      logger.error(`Error creating PDF, ${error}`);
      throw error;
    }
  }
 
  PDF.remoteMethod('selectedLayout', {
    http: {
      verb: 'post'
    },
    accepts: [
      {
        arg: 'layout',
        type: 'string'
      },
      {
        arg: 'accessToken',
        type: 'object',
        http: ctx => ctx.req.accessToken
      }
    ],
    returns: {
      arg: 'result',
      type: 'string'
    }
  });
 
};
  |