This repository has been archived by the owner on Mar 26, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathview.js
87 lines (79 loc) · 2.58 KB
/
view.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/* jshint esversion: 6 */
const fs = require('fs');
const request = require('request');
const PDFKit = require('pdfkit');
const imageSize = require('image-size');
const urlInput = document.getElementById('url-input');
const downloadButton = document.getElementById('download-button');
const baseDir = __dirname + '/../';
let imagesTempFolder = baseDir + 'temp/';
downloadButton.onclick = downloadButtonClicked;
let downloader;
let filename = "";
let length = 0;
let format = '.jpg';
function downloadButtonClicked() {
let rawURL = urlInput.value;
request(rawURL, (err, resp, body) => {
let m = body.match(/[\s\S]*pages:\s*"?(\d+)"?,\s*title:\s*"([^"]+)",/); //
length = parseInt(m[1]);
filename = m[2] + '.pdf';
let finalURL = 'http://online.' + rawURL.match(/(?:http(?:s)?:\/\/)([\s\S]*)/)[1] + '/files/large/';
console.log(`URL - ${finalURL}`);
console.log(`Filename - ${filename}`);
imagesTempFolder = baseDir + m[2]+'/';
if (!fs.existsSync(imagesTempFolder)) {
fs.mkdirSync(imagesTempFolder);
}
downloader = downloadAll(finalURL, length, format);
downloader.next();
});
}
let done = false;
function* downloadAll(url, length, format){
done = false;
for (let i = 1; i <= length; i++){
console.log(`Downloading page ${i}/${length}`);
yield download(url+i+format, i+format);
}
}
function download(url, filename){
request(url).pipe(fs.createWriteStream(imagesTempFolder + filename)).on('close', () => {
if (!done){
let resp = downloader.next();
done = resp.done;
if (done){
console.log("Done.");
convertToPDF();
}
}
});
}
function convertToPDF(){
console.log("Creating the PDF");
let doc;
for (let i = 0; i < length; i++){
console.log(`Adding image ${i+1}/${length}`);
let imgName = imagesTempFolder + (i + 1) + format;
let imgSize = imageSize(imgName);
if (!i) {
doc = new PDFKit({
size: [imgSize.width, imgSize.height],
});
doc.pipe(fs.createWriteStream(baseDir + filename));
} else {
doc.addPage({
size: [imgSize.width, imgSize.height],
});
}
doc.image(imgName, 0, 0, {
fit: [imgSize.width, imgSize.height],
align: 'center',
valign: 'center',
});
fs.unlinkSync(imgName);
}
console.log("Done creating PDF");
doc.end();
fs.rmdirSync(imagesTempFolder);
}