-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathindex.html
More file actions
executable file
·123 lines (99 loc) · 4.48 KB
/
index.html
File metadata and controls
executable file
·123 lines (99 loc) · 4.48 KB
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
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="js/pdf.js"></script>
<script>
// gui.App.argv[0] = filename
// gui.App.argv[1] = format (jpeg/png)
// gui.App.argv[2] = output folder
// gui.App.argv[3] = num pages
// OSX execution sample: /Applications/node-webkit.app/Contents/MacOS/node-webkit . "docs/Paper.pdf" "jpeg" "export"
// Windows execution sample: pdfdraw.exe "docs/Paper.pdf" "jpeg" "export"
var gui = require('nw.gui');
pdfdraw(gui.App.argv[0],gui.App.argv[1],gui.App.argv[2],parseInt(gui.App.argv[3]));
var fsOut = require('fs');
// Get the current window
var win = gui.Window.get();
win.hide();
function pdfdraw(pdfFile,format,outputFolder,totalPages){
PDFJS.disableWorker = true;
PDFJS.workerSrc = 'js/pdf.worker.js';
PDFJS.disableRange = true;
PDFJS.disableAutoFetch = true;
PDFJS.enableStats = false;
PDFJS.disableHistory = true;
PDFJS.verbosity = 5;
var parameters = {password: ''};
window.pdfFile = parameters.url = pdfFile.toString();
parameters.exportResources = false;
window.pdfFile = window.pdfFile.replace(/\//g,"\\");
window.pdfFileName = window.pdfFile.substring(window.pdfFile.lastIndexOf("\\")+1);
window.pagesToConvert = totalPages;
window.numResolved = 0;
PDFJS.getDocument(parameters).then(function(pdf) {
window.numPages = pdf.numPages;
window.pagePromises = new Array(pdf.numPages);
if(!window.totalPages)
window.totalPages = (window.pagesToConvert>-1 && window.pagesToConvert < pdf.numPages)?window.pagesToConvert:pdf.numPages;
for(var p=0;p<window.totalPages+1;p++){
console.log('Rendering page '+p);
var pagePromise = window.pagePromises[p] = pdf.getPage(p).then(function(page) {
var scale = 1275/page.view[2];
var viewport = page.getViewport(scale);
//
// Prepare canvas using PDF page dimensions
//
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport,
textLayer: null,
continueCallback: function(cont) {
cont();
}
};
//
// render the page & save to disk
//
page.render(renderContext).then(function pdfPageRenderCallback() {
console.log('Writing page '+page.pageNumber+' to disk');
var ctx = canvas.getContext('2d');
var imgData = ctx.getImageData(0,0,canvas.width,canvas.height);
ctx.globalCompositeOperation = "destination-over";
ctx.fillStyle = "#ffffff";
ctx.fillRect(0,0,canvas.width,canvas.height);
fsOut.writeFileSync(outputFolder+window.pdfFileName+"_"+page.pageNumber+"."+(format=="jpeg"?"jpg":format), decodeBase64Image(canvas.toDataURL("image/"+format)).data);
delete canvas;
window.numResolved++;
closeWindowCallback();
},function pdfPageRenderError(error) {
});
});
}
});
}
function closeWindowCallback(){
if(window.numResolved==window.totalPages-1){
gui.App.quit();
}
}
function decodeBase64Image(dataString) {
var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/),
response = {};
if (matches.length !== 3) {
return new Error('Invalid input string');
}
response.type = matches[1];
response.data = new Buffer(matches[2], 'base64');
return response;
}
</script>
</head>
<body>
Converting to PDF to jpeg
</body>
</html>