From 2d90d3221283f865c4d4ec144a90f0305cdfa6c7 Mon Sep 17 00:00:00 2001 From: chuongtran Date: Thu, 2 Jun 2022 21:53:58 +0700 Subject: [PATCH] refactor code example --- .gitignore | 1 + README.md | 105 ++++++++++++++++++++++++++++++--------------------- example.js | 50 ++++++++++++++++++++++++ index.js | 18 +++++++++ invoice.pdf | Bin 73379 -> 60263 bytes package.json | 4 +- pdf.js | 57 ---------------------------- 7 files changed, 133 insertions(+), 102 deletions(-) create mode 100644 .gitignore create mode 100644 example.js create mode 100644 index.js delete mode 100644 pdf.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30bc162 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/node_modules \ No newline at end of file diff --git a/README.md b/README.md index e464a55..04caee1 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Generate a simple PDF invoice from HTML using [puppeteer](https://github.com/Goo ## How to use - Run `npm install` to install package in package.json -- Run `node pdf.js` to generate invoice.pdf +- Run `node example.js` to generate invoice.pdf ## The PDF Invoice from HTML @@ -24,51 +24,15 @@ Generate a simple PDF invoice from HTML using [puppeteer](https://github.com/Goo 2. Using handlebars to binding data to content html 3. Using Puppeteer to generate pdf from final html +index.js + ```js -const fs = require("fs"); -const path = require("path"); const puppeteer = require("puppeteer"); const handlebars = require("handlebars"); -(async () => { - var dataBinding = { - items: [ - { - name: "item 1", - price: 100, - }, - { - name: "item 2", - price: 200, - }, - { - name: "item 3", - price: 300, - }, - ], - total: 600, - isWatermark: false, - }; - - var templateHtml = fs.readFileSync( - path.join(process.cwd(), "invoice.html"), - "utf8" - ); - var template = handlebars.compile(templateHtml); - var finalHtml = encodeURIComponent(template(dataBinding)); - - var options = { - format: "A4", - headerTemplate: "

", - footerTemplate: "

", - displayHeaderFooter: false, - margin: { - top: "40px", - bottom: "100px", - }, - printBackground: true, - path: "invoice.pdf", - }; +module.exports.html_to_pdf = async ({ templateHtml, dataBinding, options }) => { + const template = handlebars.compile(templateHtml); + const finalHtml = encodeURIComponent(template(dataBinding)); const browser = await puppeteer.launch({ args: ["--no-sandbox"], @@ -80,7 +44,62 @@ const handlebars = require("handlebars"); }); await page.pdf(options); await browser.close(); -})(); +}; +``` + +example.js + +```js +const fs = require("fs"); +const path = require("path"); +const { html_to_pdf } = require("."); + +try { + (async () => { + const dataBinding = { + items: [ + { + name: "item 1", + price: 100, + }, + { + name: "item 2", + price: 200, + }, + { + name: "item 3", + price: 300, + }, + ], + total: 600, + isWatermark: true, + }; + + const templateHtml = fs.readFileSync( + path.join(process.cwd(), "invoice.html"), + "utf8" + ); + + const options = { + format: "A4", + headerTemplate: "

", + footerTemplate: "

", + displayHeaderFooter: false, + margin: { + top: "40px", + bottom: "100px", + }, + printBackground: true, + path: "invoice.pdf", + }; + + await html_to_pdf({ templateHtml, dataBinding, options }); + + console.log("Done: invoice.pdf is created!"); + })(); +} catch (err) { + console.log("ERROR:", err); +} ``` ## How to display paid stamp watermark on invoice? diff --git a/example.js b/example.js new file mode 100644 index 0000000..cdfc7b2 --- /dev/null +++ b/example.js @@ -0,0 +1,50 @@ +const fs = require("fs"); +const path = require("path"); +const { html_to_pdf } = require("."); + +try { + (async () => { + const dataBinding = { + items: [ + { + name: "item 1", + price: 100, + }, + { + name: "item 2", + price: 200, + }, + { + name: "item 3", + price: 300, + }, + ], + total: 600, + isWatermark: true, + }; + + const templateHtml = fs.readFileSync( + path.join(process.cwd(), "invoice.html"), + "utf8" + ); + + const options = { + format: "A4", + headerTemplate: "

", + footerTemplate: "

", + displayHeaderFooter: false, + margin: { + top: "40px", + bottom: "100px", + }, + printBackground: true, + path: "invoice.pdf", + }; + + await html_to_pdf({ templateHtml, dataBinding, options }); + + console.log("Done: invoice.pdf is created!"); + })(); +} catch (err) { + console.log("ERROR:", err); +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..5ba78b1 --- /dev/null +++ b/index.js @@ -0,0 +1,18 @@ +const puppeteer = require("puppeteer"); +const handlebars = require("handlebars"); + +module.exports.html_to_pdf = async ({ templateHtml, dataBinding, options }) => { + const template = handlebars.compile(templateHtml); + const finalHtml = encodeURIComponent(template(dataBinding)); + + const browser = await puppeteer.launch({ + args: ["--no-sandbox"], + headless: true, + }); + const page = await browser.newPage(); + await page.goto(`data:text/html;charset=UTF-8,${finalHtml}`, { + waitUntil: "networkidle0", + }); + await page.pdf(options); + await browser.close(); +}; diff --git a/invoice.pdf b/invoice.pdf index 822a2c94f616b905fe83b28fc3720d354140f3ea..f1dc1b78876bd796b89e506a7f2bcb0db672ff66 100644 GIT binary patch literal 60263 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 U(|_hEKR2HM5SM{LQc>!E0NDZ90ssI2 diff --git a/package.json b/package.json index afd6a8d..d86fe28 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "author": "chuongtrh", "license": "MIT", "dependencies": { - "handlebars": "^4.0.12", - "puppeteer": "^1.8.0" + "handlebars": "^4.7.7", + "puppeteer": "^14.2.0" } } diff --git a/pdf.js b/pdf.js deleted file mode 100644 index b6f7b9b..0000000 --- a/pdf.js +++ /dev/null @@ -1,57 +0,0 @@ -const fs = require("fs"); -const path = require("path"); -const puppeteer = require('puppeteer'); -const handlebars = require("handlebars"); - -try { - (async () => { - var dataBinding = { - items: [{ - name: "item 1", - price: 100 - }, - { - name: "item 2", - price: 200 - }, - { - name: "item 3", - price: 300 - } - ], - total: 600, - isWatermark: true - } - - var templateHtml = fs.readFileSync(path.join(process.cwd(), 'invoice.html'), 'utf8'); - var template = handlebars.compile(templateHtml); - var finalHtml = encodeURIComponent(template(dataBinding)); - var options = { - format: 'A4', - headerTemplate: "

", - footerTemplate: "

", - displayHeaderFooter: false, - margin: { - top: "40px", - bottom: "100px" - }, - printBackground: true, - path: 'invoice.pdf' - } - - const browser = await puppeteer.launch({ - args: ['--no-sandbox'], - headless: true - }); - const page = await browser.newPage(); - await page.goto(`data:text/html;charset=UTF-8,${finalHtml}`, { - waitUntil: 'networkidle0' - }); - await page.pdf(options); - await browser.close(); - - console.log('Done: invoice.pdf is created!') - })(); -} catch (err) { - console.log('ERROR:', err); -}