icloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsapp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
var page = require('webpage').create(); |
|
|
|
var format = '#{format}'; |
|
var data = '#{data}'; |
|
var scale = parseFloat('#{scale}', 10); |
|
var width = parseInt('#{width}', 10); |
|
var height = parseInt('#{height}', 10); |
|
|
|
try { |
|
var pdfOptions = JSON.parse('#{pdf}' || null); |
|
} catch (e) { |
|
console.error("Parsing PDF options failed."); |
|
} |
|
|
|
try { |
|
var jpegOptions = JSON.parse('#{jpeg}' || null); |
|
} catch (e) { |
|
console.error("Parsing JPEG options failed."); |
|
} |
|
|
|
if (format === 'pdf') { |
|
page.paperSize = pdfOptions || { format: 'Letter', orientation: 'portrait', border: '1cm' }; |
|
} |
|
|
|
page.content = '<img id="chart" src="' + data + '" style="-webkit-transform-origin: left top">'; |
|
|
|
// Let the content to render, then adjust viewport, clipRect and image size. |
|
window.setTimeout(adjustSize, 1); |
|
|
|
function adjustSize() { |
|
var naturalSize = page.evaluate(function () { |
|
// By default the body has some margin, but we don't want that to be a part of the rendered image. |
|
var style = document.createElement('style'), |
|
text = document.createTextNode('body { margin: 0 }'); |
|
style.setAttribute('type', 'text/css'); |
|
style.appendChild(text); |
|
document.head.insertBefore(style, document.head.firstChild); |
|
|
|
var img = document.getElementById('chart'); |
|
|
|
return { |
|
width: img.naturalWidth, |
|
height: img.naturalHeight |
|
}; |
|
}); |
|
|
|
if (width && height) { |
|
if (width !== naturalSize.width || height !== naturalSize.height) { |
|
page.viewportSize = { width: width, height: height }; |
|
page.clipRect = { left: 0, top: 0, width: width, height: height }; |
|
} |
|
} |
|
|
|
width = Math.round((width || naturalSize.width) * scale); |
|
height = Math.round((height || naturalSize.height) * scale); |
|
|
|
page.evaluate(function (width, height) { |
|
var img = document.getElementById('chart'); |
|
img.style.width = width; |
|
img.style.height = height; |
|
}, width, height); |
|
|
|
// Let the image to scale before rendering. |
|
window.setTimeout(render, 1); |
|
} |
|
|
|
function render() { |
|
page.render('#{filename}', { format: format, quality: jpegOptions && jpegOptions.quality || 80 }); |
|
phantom.exit(); |
|
}
|
|
|