Skip to content

Commit 8f5b7ad

Browse files
authored
Merge pull request #282 from Ninjavin/webpage-pdf-nodejs
Download And Save A Webpage As PDF in Nodejs
2 parents 61eda00 + 34998d5 commit 8f5b7ad

File tree

6 files changed

+461
-0
lines changed

6 files changed

+461
-0
lines changed

Diff for: JavaScript/Webpage-as-pdf/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/node_modules

Diff for: JavaScript/Webpage-as-pdf/README.md

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Save a Webpage as a PDF
2+
3+
This NodeJs Script uses Puppeteer and saves a webpage as a pdf.
4+
5+
## How to Run?
6+
7+
+ Run `npm install` in the project folder.
8+
+ Run `node index.js "<webpage-url>"` to save the webpage as PDF.
9+
10+
## Sample Input & Output
11+
12+
![image](images/webpage-pdf.png)

Diff for: JavaScript/Webpage-as-pdf/images/webpage-pdf.png

28.8 KB
Loading

Diff for: JavaScript/Webpage-as-pdf/index.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const puppeteer = require('puppeteer');
2+
const args = process.argv;
3+
getTime = () => {
4+
let today = new Date();
5+
let y = today.getFullYear();
6+
let m = today.getMonth() + 1;
7+
let d = today.getDate();
8+
let h = today.getHours();
9+
let mi = today.getMinutes();
10+
let s = today.getSeconds();
11+
return y + "-" + m + "-" + d + "-" + h + "-" + mi + "-" + s;
12+
}
13+
// Taking input from the user
14+
if(args.length === 2){
15+
console.log("Correct command format: `node index.js <webpage-url>`")
16+
}else{
17+
(async () => {
18+
// Launching the browser
19+
const browser = await puppeteer.launch()
20+
const page = await browser.newPage()
21+
await page.goto(args[2])
22+
await page.emulateMediaType('screen')
23+
// Converting to PDF
24+
await page.pdf({
25+
path: `pdf-${getTime()}.pdf`,
26+
printBackground: true,
27+
format: 'A4'
28+
})
29+
await browser.close()
30+
console.log("Saved the given webpage as PDF!")
31+
})();
32+
}

0 commit comments

Comments
 (0)