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 123 124 125 126 127 128 129 | 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}`}`; if (!id) throw new Error('Resource ID is required!'); if (!lang) throw new Error('Language is required!'); 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'}); await page.emulateMedia('print'); 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) => { if (!layout) throw new Error('Layout is required!'); 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' } }); }; |