-
Notifications
You must be signed in to change notification settings - Fork 0
/
rasterize.js
153 lines (128 loc) · 3.57 KB
/
rasterize.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
marginsType Integer - Specifies the type of margins to use. Uses 0 for default margin, 1 for no margin, and 2 for minimum margin.
pageSize String - Specify page size of the generated PDF. Can be A3, A4, A5, Legal, Letter, Tabloid or an Object containing height and width in microns.
printBackground Boolean - Whether to print CSS backgrounds.
printSelectionOnly Boolean - Whether to print selection only.
landscape Boolean - true for landscape, false for portrait.
*/
var argvs = process.argv.slice(2);
var settings = {
pageSize: 'A4',
landscape: false,
printBackground: true,
marginsType: 1,
timeout: 1000
};
/* ---- RAISE ERRORS BASED ON ARGVS LENGTH ----*/
if (argvs.length < 2) {
console.log("You must supply an url and a filename");
process.exit();
}
if (argvs.length > 12) {
console.log("Too much arguments supplied");
process.exit();
}
/* ---- VALIDATE INPUTS ----*/
function isValidPageSize(val) {
var arr = ['A3', 'A4', 'A5', 'Legal', 'Letter', 'Tabloid'];
if (arr.indexOf(val) > -1) {
return val;
} else {
console.log(val + " is not a valid argument for pageSize, here are the valid ones : " + arr.join(' | '));
process.exit();
}
}
function isValidLandscape(val) {
var arr = ['0', '1'];
if (arr.indexOf(val) > -1) {
return Boolean(parseInt(val));
} else {
console.log(val + " is not a valid argument for landscape, here are the valid ones : " + arr.join(' | '));
process.exit();
}
}
function isValidPrintBackground(val) {
var arr = ['0', '1'];
if (arr.indexOf(val) > -1) {
return Boolean(parseInt(val));
} else {
console.log(val + " is not a valid argument for printBackground, here are the valid ones : " + arr.join(' | '));
process.exit();
}
}
function isValidMarginsType(val) {
var arr = ['0', '1', '2'];
if (arr.indexOf(val) > -1) {
return parseInt(val);
} else {
console.log(val + " is not a valid argument for marginsType, here are the valid ones : " + arr.join(' | '));
process.exit();
}
}
function isValidTimeout(val) {
if (isNaN(val)) {
console.log(val + " is not a valid argument for Timeout. It must be a valid number");
process.exit();
} else {
return parseInt(val);
}
}
var validation = {
pageSize: isValidPageSize,
landscape: isValidLandscape,
printBackground: isValidPrintBackground,
marginsType: isValidMarginsType,
timeout: isValidTimeout
}
/* ---- TRANSFORM ARGVS TO DICT ----*/
var currentOption = null;
var args = [];
function validateOption(arg) {
settings[currentOption] = validation[currentOption](arg);
currentOption = null;
}
function processArg(arg) {
if ( arg.substring(0,2) == '--' ) { // The arg is a prefix like --timeout
var option = arg.substring(2, arg.length); // Get the prefix, eg: timeout
if ( Object.keys(validation).indexOf( option ) > -1 ) {
currentOption = option;
} else {
console.log(arg + " is not a valid prefix");
process.exit();
}
} else {
if (currentOption) {
validateOption(arg);
} else {
args.push(arg);
}
}
}
argvs.map(function(arg) {
processArg(arg);
});
if (args.length > 2) {
console.log("Too much arguments supplied");
process.exit();
}
var url = args[0];
var filename = args[1];
/* ---- LAUNCH NIGHTMARE PROCESS ----*/
var Nightmare = require('nightmare');
var nightmare = Nightmare({
show: false,
webPreferences: {
partition: 'nopersist'
}
});
nightmare
.goto(url)
.wait(settings.timeout)
.pdf(filename, settings)
.end()
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.log(error);
});