This commit is contained in:
parent
6e5728eead
commit
96becec9d3
|
@ -0,0 +1,9 @@
|
||||||
|
module.exports = class NotFoundError extends Error {
|
||||||
|
constructor(message = 'Not found', code = 'NOT_FOUND', ...translateArgs) {
|
||||||
|
super(message);
|
||||||
|
this.name = 'NotFoundError';
|
||||||
|
this.statusCode = 404;
|
||||||
|
this.code = code;
|
||||||
|
this.translateArgs = translateArgs;
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,22 @@
|
||||||
|
const Component = require(`vn-print/core/component`);
|
||||||
|
const reportHeader = new Component('report-header');
|
||||||
|
const reportFooter = new Component('report-footer');
|
||||||
|
const reportBody = new Component('report-body');
|
||||||
|
const NotFoundError = require('vn-loopback/util/not-found-error');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
components: {
|
||||||
|
'report-body': reportBody.build(),
|
||||||
|
'report-header': reportHeader.build(),
|
||||||
|
'report-footer': reportFooter.build()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
checkMainEntity: function(entity) {
|
||||||
|
if (entity == null)
|
||||||
|
throw new NotFoundError();
|
||||||
|
},
|
||||||
|
dated: function(filters, date, format) {
|
||||||
|
return filters.date(date, format);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -23,43 +23,39 @@ class Report extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
async toPdfStream() {
|
async toPdfStream() {
|
||||||
try {
|
const template = await this.render();
|
||||||
const template = await this.render();
|
const defaultOptions = Object.assign({}, config.pdf);
|
||||||
const defaultOptions = Object.assign({}, config.pdf);
|
|
||||||
|
|
||||||
const optionsPath = `${this.path}/options.json`;
|
const optionsPath = `${this.path}/options.json`;
|
||||||
const fullPath = path.resolve(__dirname, optionsPath);
|
const fullPath = path.resolve(__dirname, optionsPath);
|
||||||
let options = defaultOptions;
|
let options = defaultOptions;
|
||||||
if (fs.existsSync(fullPath))
|
if (fs.existsSync(fullPath))
|
||||||
options = require(optionsPath);
|
options = require(optionsPath);
|
||||||
|
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
Cluster.pool.queue({}, async({page}) => {
|
Cluster.pool.queue({}, async({page}) => {
|
||||||
await page.emulateMediaType('screen');
|
await page.emulateMediaType('screen');
|
||||||
await page.setContent(template);
|
await page.setContent(template);
|
||||||
|
|
||||||
const element = await page.$('#pageFooter');
|
const element = await page.$('#pageFooter');
|
||||||
|
|
||||||
let footer = '\n';
|
let footer = '\n';
|
||||||
if (element) {
|
if (element) {
|
||||||
footer = await page.evaluate(el => {
|
footer = await page.evaluate(el => {
|
||||||
const html = el.innerHTML;
|
const html = el.innerHTML;
|
||||||
el.remove();
|
el.remove();
|
||||||
return html;
|
return html;
|
||||||
}, element);
|
}, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
options.headerTemplate = '\n';
|
options.headerTemplate = '\n';
|
||||||
options.footerTemplate = footer;
|
options.footerTemplate = footer;
|
||||||
|
|
||||||
const stream = await page.pdf(options);
|
const stream = await page.pdf(options);
|
||||||
|
|
||||||
resolve(stream);
|
resolve(stream);
|
||||||
});
|
|
||||||
});
|
});
|
||||||
} catch (e) {
|
});
|
||||||
console.log('ERROR CATCHED:', e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue