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