Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- // dependencies
- const express = require('express');
- const bodyParser = require('body-parser');
- const path = require('path');
- const fs = require('fs');
- const puppeteer = require('puppeteer'); // the package to generate pdf
- const EventEmitter = require('events');
- const opn = require('opn');
- const app = express();
- const emitter = new EventEmitter();
- // generates a unique invoice number
- let today = new Date();
- let dd = today.getDate();
- let mm = today.getMonth() + 1;
- let invoicenum = '';
- let yyyy = today.getFullYear();
- if (dd < 10) {
- dd = '0' + dd;
- }
- if (mm < 10) {
- mm = '0' + mm;
- }
- today = dd + '.' + mm + '.' + yyyy;
- invoicenum = dd + mm + yyyy + Math.floor(Math.random() * 1000) + 1;
- // events
- emitter.on('toPdf', () => {
- opn('http://localhost:3000/generate');
- });
- emitter.on('generatePdf', async () => {
- const url = 'http://localhost:3000/create';
- const browser = await puppeteer.launch();
- const page = await browser.newPage();
- await page.goto(url, {waitUntil: 'networkidle2'});
- await page.pdf({path: `invoice_${invoicenum}.pdf`, format: 'A4'});
- await browser.close();
- console.log('The invoice has been generated.');
- await opn(`http://localhost:3000/invoice_${invoicenum}.pdf`);
- });
- app.use(express.static(__dirname));
- app.use(bodyParser.urlencoded({ extended: true }));
- // routing
- app.get('/', (req, res) => {
- res.sendFile(path.join(__dirname + '/index.html'));
- });
- app.post('/create', (req, res) => {
- let parsedHtml = req.body.data;
- fs.writeFile('invoice.html', parsedHtml, (err) => {
- if (err) {
- console.log('An error occured.');
- return;
- } else {
- console.log('The new HTML file was successfully created.');
- }
- });
- });
- app.get('/create', (req, res) => {
- res.sendFile(path.join(__dirname + '/invoice.html'));
- emitter.emit('toPdf');
- });
- app.get('/generate', (req, res) => {
- emitter.emit('generatePdf');
- });
- // listening on port
- app.listen(3000, () => {
- console.log('Server is running on port 3000...');
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement