2
0
mirror of https://github.com/frappe/books.git synced 2024-09-20 19:29:02 +00:00
books/server/pdf.js

54 lines
1.6 KiB
JavaScript
Raw Normal View History

const frappe = require('frappejs');
2018-03-29 18:51:56 +00:00
const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');
const { getTmpDir } = require('frappejs/server/utils');
const { getHTML } = require('frappejs/common/print');
const { getRandomString } = require('frappejs/utils');
2018-03-29 18:51:56 +00:00
async function makePDF(html, filepath) {
2018-03-29 18:51:56 +00:00
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(html);
await page.pdf({
path: filepath,
format: 'A4'
});
await browser.close();
}
2018-04-16 09:32:31 +00:00
async function getPDFForElectron(doctype, name) {
2018-04-30 14:27:41 +00:00
const { shell } = require('electron');
2018-04-16 09:32:31 +00:00
const html = await getHTML(doctype, name);
2018-04-16 13:04:16 +00:00
const filepath = path.join(frappe.electronSettings.directory, name + '.pdf');
2018-04-16 09:32:31 +00:00
await makePDF(html, filepath);
shell.openItem(filepath);
}
function setupExpressRoute() {
if (!frappe.app) return;
frappe.app.post('/api/method/pdf', frappe.asyncHandler(handlePDFRequest));
}
async function handlePDFRequest(req, res) {
const args = req.body;
const { doctype, name } = args;
const html = await getHTML(doctype, name);
const filepath = path.join(getTmpDir(), `frappe-pdf-${getRandomString()}.pdf`);
await makePDF(html, filepath);
const file = fs.createReadStream(filepath);
const stat = fs.statSync(filepath);
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', `attachment; filename=${path.basename(filepath)}`);
file.pipe(res);
}
module.exports = {
makePDF,
2018-04-16 09:32:31 +00:00
setupExpressRoute,
getPDFForElectron
}