From 1f60f32adeceefeeff4f04280a6635d432a8a804 Mon Sep 17 00:00:00 2001 From: Alan Poulain Date: Mon, 12 Sep 2016 17:05:43 +0200 Subject: [PATCH 1/6] Add evaluateScript option to evaluate custom script in the context of the web page --- lib/scripts/pdf_a4_portrait.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/scripts/pdf_a4_portrait.js b/lib/scripts/pdf_a4_portrait.js index a9197c4..5b78b6a 100755 --- a/lib/scripts/pdf_a4_portrait.js +++ b/lib/scripts/pdf_a4_portrait.js @@ -57,6 +57,9 @@ page.onLoadFinished = function (status) { // The paperSize object must be set at once page.paperSize = definePaperSize(getContent(page), options) + // Evaluate custom JavaScript + if (options.evaluateScript) page.evaluateJavaScript(options.evaluateScript) + // Output to parent process var fileOptions = { type: options.type || 'pdf', From c50ec10cde9b18401df5e5a8e6da16fe9430d1da Mon Sep 17 00:00:00 2001 From: Alan Poulain Date: Mon, 12 Sep 2016 17:07:41 +0200 Subject: [PATCH 2/6] Collect console.log messages and add them in the returned JSON --- lib/scripts/pdf_a4_portrait.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/scripts/pdf_a4_portrait.js b/lib/scripts/pdf_a4_portrait.js index 5b78b6a..78f7ee6 100755 --- a/lib/scripts/pdf_a4_portrait.js +++ b/lib/scripts/pdf_a4_portrait.js @@ -57,6 +57,12 @@ page.onLoadFinished = function (status) { // The paperSize object must be set at once page.paperSize = definePaperSize(getContent(page), options) + // Collect console.log messages in rendered web page and custom script + var consoleMessages = [] + page.onConsoleMessage = function (msg) { + consoleMessages.push(msg) + } + // Evaluate custom JavaScript if (options.evaluateScript) page.evaluateJavaScript(options.evaluateScript) @@ -68,7 +74,7 @@ page.onLoadFinished = function (status) { var filename = options.filename || (options.directory || '/tmp') + '/html-pdf-' + system.pid + '.' + fileOptions.type page.render(filename, fileOptions) - system.stdout.write(JSON.stringify({filename: filename})) + system.stdout.write(JSON.stringify({filename: filename, consoleMessages: consoleMessages})) exit(null) } From b3fe6600fc823991265d58bcca302568540b7c01 Mon Sep 17 00:00:00 2001 From: Alan Poulain Date: Mon, 12 Sep 2016 17:08:29 +0200 Subject: [PATCH 3/6] Add evaluateScript option to the README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3c1c73f..36ecdd6 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ config = { "phantomArgs": [], // array of strings used as phantomjs args e.g. ["--ignore-ssl-errors=yes"] "script": '/url', // Absolute path to a custom phantomjs script, use the file in lib/scripts as example "timeout": 30000, // Timeout that will cancel phantomjs, in milliseconds + "evaluateScript": "function () { console.log(document.title) }", // Evaluate a script in the context of the web page (console.log are collected in consoleMessages field in the JSON returned by the callback: res) // HTTP Headers that are used for requests "httpHeaders": { From 4c09ae727abcc39d03d513858a22996e5b375a2a Mon Sep 17 00:00:00 2001 From: Alan Poulain Date: Mon, 12 Sep 2016 17:09:52 +0200 Subject: [PATCH 4/6] Print returned JSON (filename and consoleMessages) in the CLI --- bin/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/index.js b/bin/index.js index d8b7661..1c0d62c 100755 --- a/bin/index.js +++ b/bin/index.js @@ -28,5 +28,6 @@ function htmlpdf (source, destination) { } pdf.create(html, options).toFile(destination, function (err, res) { if (err) throw err + if (res) console.log(JSON.stringify(res)) }) } From 22271b0d8bc1ae77fffd6e9e90bbc5861bdbaa2c Mon Sep 17 00:00:00 2001 From: Alan Poulain Date: Mon, 12 Sep 2016 17:12:36 +0200 Subject: [PATCH 5/6] Add the returned JSON (without the filename) as a third argument of the callback for toBuffer and toStream --- lib/pdf.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/pdf.js b/lib/pdf.js index 9195e7f..abd7fe5 100644 --- a/lib/pdf.js +++ b/lib/pdf.js @@ -47,7 +47,8 @@ PDF.prototype.toBuffer = function PdfToBuffer (callback) { if (err) return callback(err) fs.unlink(res.filename, function unlinkPdfFile (err) { if (err) return callback(err) - callback(null, buffer) + delete res.filename + callback(null, buffer, res) }) }) }) @@ -62,13 +63,15 @@ PDF.prototype.toStream = function PdfToStream (callback) { return callback(err) } + var filename = res.filename stream.on('end', function () { - fs.unlink(res.filename, function (err) { + fs.unlink(filename, function (err) { if (err) console.log('html-pdf:', err) }) }) - callback(null, stream) + delete res.filename + callback(null, stream, res) }) } From 5d4dfce6769420ffcf3679a79d960f615dfbd4b4 Mon Sep 17 00:00:00 2001 From: Alan Poulain Date: Mon, 12 Sep 2016 17:13:32 +0200 Subject: [PATCH 6/6] Change the documentation examples to reflect the new third argument of the callback for toBuffer and toStream --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 36ecdd6..338336d 100644 --- a/README.md +++ b/README.md @@ -45,11 +45,11 @@ pdf.create(html).toFile([filepath, ]function(err, res){ console.log(res.filename); }); -pdf.create(html).toStream(function(err, stream){ +pdf.create(html).toStream(function(err, stream, res){ stream.pipe(fs.createWriteStream('./foo.pdf')); }); -pdf.create(html).toBuffer(function(err, buffer){ +pdf.create(html).toBuffer(function(err, buffer, res){ console.log('This is a buffer:', Buffer.isBuffer(buffer)); });